Fx0 で Seriously.js を使ってみたい(その2)


# ■はじめに
前回の記事で Seriously.js のサンプルコードを Firefox OS 向けの Web アプリへと変更を行いました。

PC 版の Web サイトを単純に変更したのみでしたので、画面サイズがあっていない為、PC 版の表記となっていました。

![seriously_vignette_demo.png](https://qiita-image-store.s3.amazonaws.com/0/27642/80bcc357-a884-39c1-ae57-add635566a05.png "seriously_vignette_demo 3.png")


この点について修正を行いましたので、修正方法を記載したいと思います。

# viewportの追加

スマートフォン向けの Web サイトの作成経験のある方はご存知かと思いますが、index.html の <meta>タグ に viewport を追加することで、表示時のサイズ指定が行えます。

```index.htmlの前半部
<html>
<head><title>Seriously.js Tutorial</title></head>
<body>
````

ここを

```index.htmlの前半部
<html>
<head><title>Seriously.js Tutorial</title></head>
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1">
<body>
````

このように変更します。

各項目ですが、それぞれ以下の様になります。

* width  
表示時のサイズの指定が行えます。ここでは device の幅と一致するように指定を行っています。
* user-scalable  
ユーザによるズームの可否の指定が行えます。Web ブラウザ上でのピンチインピンチアウト実施時の拡大縮小の可否が該当します。 no を指定することでユーザによる拡大縮小を行えないようにしています。
* initial-scale  
表示時の初期ズーム倍率を指定出来ます。1を指定することでズームの変更なしとしています。

このように、表示時に画面の表示幅と一致させ、ユーザによるズームの変更を不可としています。

スマートフォン向けの Web サイトの操作感を思い出して見て下さい。
対応サイトはこのような動作になっていますよね。

お決まりな表現となっていますので、 Firefox OS 向けの Web アプリを開発される際は覚えておいて損のない記載となります。

※<meta>への記載できる詳細については[MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Element/meta)をご参照下さい。

さて、viewport の指定を行いましたが、どのような表示となったでしょうか。

![viewport_blank.png](https://qiita-image-store.s3.amazonaws.com/0/27642/e9027159-6340-d751-8a52-b9e890b2f926.png "viewport_blank.png")

先程より大分改善されましたが、まだ隙間がある状態となっています。

WebIDE 上からインスペクタで覗いてみてみましょう。

![webide.png](https://qiita-image-store.s3.amazonaws.com/0/27642/6c44ec4a-6de5-ef84-dc46-f4ccbbdaf206.png "webide.png")

画像のように選択すると、画面上のアプリではコード上の選択箇所に対応する要素が次の図のように破線で表示されます。

![ss.png](https://qiita-image-store.s3.amazonaws.com/0/27642/db6d27d4-aac9-729a-0397-c38ddde4d6a0.png "ss.png")


どうやら以下のコードの画像指定部分が問題のようです。

```index.html
<body>
	<!-- page content goes here -->
	<img src="./images/colorbars.png" id="colorbars"/>
```

幅の指定を行ってみましょう。

```index.html
<body>
	<!-- page content goes here -->
	<img src="./images/colorbars.png" id="colorbars" width="100%" />
```

画面の表示は上の画像のみ大きくなりました。
どうやら、Seriously.js ではエフェクトを掛ける場合は元の画像サイズのまま表示される模様です。

![image_only.png](https://qiita-image-store.s3.amazonaws.com/0/27642/1c152911-2551-6e54-34c9-3ef71d08b36d.png "image_only.png")

普通に考えると、大きさを変更できるはずなので、 Seriously.js の公式サイトを見てみました。

どうやら、reformat というデモがサイズ変更しているみたいです。

http://brianchirls.github.io/Seriously.js/examples/transform/reformat.html

このコードを見てみることにしました。

# reformat

以下に reformat のサンプルコードがあります。

https://github.com/brianchirls/Seriously.js/blob/master/examples/transform/reformat.html

コードを眺めてみると[この部分](https://github.com/brianchirls/Seriously.js/blob/master/examples/transform/reformat.html#L42-L48)で大きさを指定しているみたいです。

```reformat
			reformat = seriously.transform('reformat');
			target = seriously.target('#canvas');
			//set up reformat parameters
			reformat.width = target.width;
			reformat.height = target.height;
			reformat.mode = '#mode';
```

seriously.transform() に reformat を指定し、該当の幅、高さを変更。その後、モード指定をし、source に読み込み画像を設定することで、このサイズに大きさが変わるみたいです。

mode に何を指定できるのかAPIリファレンスを見てみたのですが、あまり記載が無く、みあたらず。。。

https://github.com/brianchirls/Seriously.js/wiki/API-Reference

デモページでは contain, cover, width, heightなどの指定可能項目が並んでおり、いくつか指定できる要素があるみたいです。

```index.html
        // declare our variables
        var seriously, // the main object that holds the entire composition
            colorbars, // a wrapper object for our source image
            vignette, // a vignette effect
            reformat, // reformat node
            target; // a wrapper object for our target canvas

        seriously = new Seriously();
        colorbars = seriously.source('#colorbars');
        reformat = seriously.transform('reformat');
        target = seriously.target('#canvas');
        vignette = seriously.effect('vignette');

        reformat.width = target.width;
        reformat.height = target.height;
        reformat.mode = 'contain';
        reformat.source = colorbars;
```

この様にコードを変更しました。

どのような表示になったか見てみましょう。

![fit.png](https://qiita-image-store.s3.amazonaws.com/0/27642/13f5b2a5-13e3-fe49-4e4a-5f7e94438cea.png "fit.png")

お、きちんと表示されるようになりました。

今回の対応コードは以下にアップしてます。

https://github.com/namaranran/seriouslyjs_sample/tree/master/hello_seriouslyjs_fit_size


# ■おわりに

Seriously.js のリファレンスがそこまで充実していないのか( 別な場所にある?? )、画像サイズを大きくするのに少し手間取りました・・・

サンプルコードがあるので、なにか詰まった場合はサンプルを参考にして進めるのが良さそうですね。