jQuery Mobileとの組み合わせではeventプロパティの設定に注意
次に、jQuery MobileとLazy Loadプラグインを組み合わせてスマートフォン向けページを作ります。Webページの全コードをリスト2に示します。
<!DOCTYPE html> <html> <head> <title>Lazy Loadサンプル(モバイル用)</title> <!-- 文字コード、viewportの設定 --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" /> <!-- jQuery、jQuery Mobileの導入 --> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css" /> <script src="http://code.jquery.com/jquery-2.0.3.min.js"></script> <script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script> <!-- Lazy Loadの導入 ...... (1)--> <script src="lazyload/jquery.lazyload.min.js"></script> <!-- 画像のCSS ...... (2)--> <style> div.lazy-container { text-align:center; } img.lazy { width:288px; height:216px; } </style> <!-- Lazy Loadの初期化処理 ...... (3)--> <script> $(document).on("pagecreate", function(event) { $(this).find("img.lazy").lazyload({ effect : "fadeIn", event: "scrollstop" // jQuery Mobile 固有実装 }); }); </script> </head> <body> <!-- ページ --> <div data-role="page"> <!-- ヘッダー --> <header data-role="header" data-position="fixed"> <h1>Lazy Load</h1> </header> <!-- コンテンツ本体(遅延読込させる画像)...... (4) --> <div class="ui-content lazy-container" role="main"> <div> <img class="lazy" src="img/dummy.png" data-original="img/001.jpg" /> </div> <div> <img class="lazy" src="img/dummy.png" data-original="img/002.jpg" /> </div> <!-- 中略 --> </div> </div> </body> </html>
(1)、(2)、(4)の記述はPC向けページとほぼ同一です。異なるのは(3)で、Lazy Loadの遅延読込を発生させるイベントとして(jQuery Mobile固有イベントの)scrollstopを指定しています。これはjQuery Mobile 1.4においてscrollイベントが発生しない事象に対応するものです。
リスト2をスマートフォンブラウザで表示すると、PC向けページと同様に、Webページのスクロールに伴って画像が遅延読込されることが確認できます。