Onsen UI 2.xはAngularJSと切り離されたので、好きなJavaScriptライブラリと組み合わせて使えるようになっています。もちろんjQueryも利用できます。

今回はjQueryライブラリの一つ、グリッド表示を行うWookmarkとOnsen UI組み合わせて使ってみたいと思います。

Wookmarkについて

WookmarkはPinterestのように幅は固定、高さが異なるデータを隙間なく綺麗に並べてグリッド表示できるライブラリです。高さが異なるデータを敷き詰める表示方法は、ファッション系のアプリなどでしばしば用いられます。タブレットくらいの幅がある方が見栄えが良さそうです。

なお、幅・高さともに固定サイズのデータを整然と並べる場合はOnsen UIだけでもできます。

Onsen UIテンプレートについて

アプリのベースとなるテンプレートには、Onsen UI 2.xのOnsen UI V2 JS Splitterを使っています。

このテンプレートではハンバーガーアイコンをタップするとメニューが表示されます。今回は上から2番目のメニューをタップした際にグリッド表示を行うように作っていきます。

必要なライブラリのインストール

Monaca クラウドIDEを使う場合

JS/CSSコンポーネントの管理から「wookmark」で検索してインストールします。
ローダーに追加するファイルには、以下の3ファイルを選択してください。

  • components/wookmark/wookmark.min.js
  • components/wookmark/css/main.css
  • components/jquery/dist/jquery.min.js

Monaca Localkitを使う場合/Onsen UIのみを使う場合

ローカルのBowerを使ってインストールします。

Monaca Localkitを使う場合は、デフォルトのインストール先(bower_components)を www/vendors/ に変更します。プロジェクトルート以下に .bowerrc ファイルを作成してインストールパスを指定します。

{
  "directory": "www/vendors/"
}

以下のコマンドを実行して、インストールを行います。

$ bower install jquery
$ bower install wookmark

インストールができたら、index.htmlの <head> タグ内にて必要なライブラリを読み込みます。

<link rel="stylesheet" href="vendors/wookmark/css/main.css">
<script src="vendors/jquery/dist/jquery.min.js"></script>
<script src="vendors/wookmark/wookmark.js"></script>

以上で準備は完了です。

index.htmlの編集

まず、表示されるページを特定するためにIDを割り当てておきます。
今回は上から2番目のメニュー(デフォルトでは settings というラベル)がタップされたときにグリッド表示を行います。

<ons-template id="settings.html">
  <ons-page id="setting"> <!-- ここが修正部分 -->
    :
  </ons-page>
</ons-template>

さらに表示するデータを設定します。これは <ons-page> 内に記述します( </ons-toolbar> の下に記述してください)。height属性を指定しなくても表示はできるようですが、計算処理が入る分表示が遅くなってしまうようです。なるべくheight属性を指定した方が良いでしょう。今回はダミーの画像として猫の画像を表示してくれる PlaceKitten を利用しています。

<div>
  <ul class="tiles-wrap animated" id="wookmark">
    <li><img src="http://placekitten.com/200/297" width="200" height="297"><p>16</p></li>
    <li><img src="http://placekitten.com/200/200" width="200" height="200"><p>17</p></li>
    <li><img src="http://placekitten.com/200/200" width="200" height="200"><p>18</p></li>
    <li><img src="http://placekitten.com/200/398" width="200" height="398"><p>19</p></li>
    <li><img src="http://placekitten.com/200/267" width="200" height="267"><p>20</p></li>
    <li><img src="http://placekitten.com/200/283" width="200" height="283"><p>21</p></li>
    <li><img src="http://placekitten.com/200/300" width="200" height="300"><p>22</p></li>
    <li><img src="http://placekitten.com/200/252" width="200" height="252"><p>23</p></li>
    <li><img src="http://placekitten.com/200/158" width="200" height="158"><p>24</p></li>
    <li><img src="http://placekitten.com/200/300" width="200" height="300"><p>25</p></li>
    <li><img src="http://placekitten.com/200/297" width="200" height="297"><p>26</p></li>
    <li><img src="http://placekitten.com/200/200" width="200" height="200"><p>27</p></li>
    <li><img src="http://placekitten.com/200/200" width="200" height="200"><p>28</p></li>
    <li><img src="http://placekitten.com/200/398" width="200" height="398"><p>29</p></li>
    <li><img src="http://placekitten.com/200/267" width="200" height="267"><p>30</p></li>
  </ul>        
</div>

JavaScriptの実行

JavaScriptも www/index.html 内に記述します。
テンプレートに含まれるソースコードの一部を、以下のように書き換えましょう。

window.fn.load = function(page) {
  var content = document.getElementById('content');
  var menu = document.getElementById('menu');
  // 以下を変更
  content.load(page).then(function(page) {
    if ($(page).attr("id") === 'setting') {
      $('#wookmark').wookmark();  // Wookmarkの実行
    }
    menu.close();
  });
};

<ons-page> のIDが setting の場合だけ Wookmark を実行します。ページが切り替わると描画内容が破棄されるので、ページ切り替えの度に実行する必要があります。

試してみる

ここまでできあがったらMonacaデバッガーで確認してみましょう。メニューをSettingに切り替えた際に猫の画像がたくさん表示されれば成功です。


Onsen UI 2.xはスマートフォン/タブレットアプリならではのUI/UXに特化しており、JavaScriptライブラリは自由に選べるようになっています。jQueryであればこれまでの資産がたくさんありますので、それらを使うことでリッチなUIのアプリケーションが簡単に作れるはずです。ぜひ試してください。

今回のコードはmoongift/MonacaWookmark: Demo application of Monaca with Wookmarkにアップロードしてあります。参考にしてください。