jQuery用プラグイン “PhotoSwipe” を、jQuery Mobileに適用したサンプルを試してみました。
これは、jQueryを使ってタッチデバイス上でスタイリッシュなイメージギャラリーを作るためのプラグインです。jQuery Mobileに特化したものではないですが、親和性は高いはずなので、組み合わせてみます。
PhotoSwipeの基本的な機能は、アンカーで参照した先にある複数の画像を、インターフェースのついたスライドとして見せてくれるものです。今回は提供されているサンプルを踏襲して、3×3のサムネイル画面をつくり、サムネイルがクリックされるとスライドショーが開始されるようにしたいと思います。ただし、サンプルにはjQuery Mobile的にまずい点があるので、その辺の修正コードも含むようにしています。
さておき、簡単な実装方法とデモを用意してみました。
デモ
簡易的なデモページを、下に用意しました。
最初のサムネイル画面は、特にPhotoSwipeとは関係ありません。リストにアンカー付きの画像を並べ、それらをスタイルシートで制御しているだけです。ただ、これもレスポンシブ・レイアウトを用いた画像サイズによらない簡単なテクニックを使っていますので、興味のある方はヘッド要素内のスタイル定義を見てみてください。レスポンシブ・レイアウトについては、こちらから。
任意のサムネイルをクリックすると、PhotoSwipeが発動します。前後の画像へ切り替え、自動再生、プレビューモードの終了、ホイールやスワイプによる画像切り替えなどが出来ます。スマートフォンなど非力な端末上でも快適に動作します。
実装方法
このプラグインは画像なども含むため、まずは公式ページから最新版のファイル一式をダウンロードします。そして解凍し、適当な場所に配置してください。
次に、head要素内でプラグイン用のCSSとJS、それにライブラリとなるklassを取り込みます。
HTMLには、サムネイル画像と実画像へのリンクを並べます。サムネイルのスタイルについては、適当に。
この時、アンカーには data-ajax=”false” を指定するのを忘れないようにしてください。これが無いと、リンクをjQuery Mobileのフレームワークが引き受けてしまい、PhotoSwipeがハンドルできません。PhotoSwipeの公式ページにはここに rel=”external” を指定するよう指示しています。しかし、この指定は外部サイトへのリンクを意味するものです。結果的に「Ajaxによるページ遷移を行わせない」という意味では同じことですが、セマンティックな観点から data-ajax による指定を用いるのが正しいでしょう(実際にリンク先がFlickrなどの外部サイトである場合などは、external指定でも構わないかもしれませんが)。
次に、プラグインの呼び出しを行うコードを記述します。後述しますが、これはhead要素内のjQuery CoreとPhotoSwipeプラグインのJSを読み込んだ後、jQuery Mobileを取り込む前に記述してください。
公式のサンプルでは、$(document).ready()を使って処理をバインドしています。しかし、これは1つ前にリンクページが存在している複数ページテンプレートだから正常に動作する形であって、jQuery Mobileの典型的なパターンからは外れたスタイルです。この辺のことは日本語リファレンスにも記述してあるので、参考にしてください。
処理はプラグインの呼び出しとしては少し長くなっていますが、難しいことはしていません。ページが初期化された際にプラグインを適用し、ページが削除された際にはメモリを解放するようにしています。これも元のサンプルはpageshowとpagehideを使っていますが、キャッシュされている場合などに処理を無駄に繰り返すことになってしまうので、イベントの場所をpageinitとpageremoveに変えています。
基本的に、やるべきことはこれだけです。
jQuery Mobileと組み合わせずとも、単体で実績のあるプラグインですので、動作も安定しています。こうしたコンテンツを作る需要は高いと思いますので、積極的に活用できれば。
Related posts:
- [jQuery Mobile] ActionSheetプラグイン
- [jQuery Mobile] BartenderプラグインでフッタをiOSアプリ風にする
- [jQuery Mobile] Paginationプラグイン
- [jQuery Mobile] Markup Cheat Sheet
- [jQuery Mobile] 1時間でミニサイトをつくる
参考にさせていただきました。
質問ですが、動的に追加した要素にもphotoswipeの効果を適用することは可能でしょうか?
お教えいただければと思います。
動的に追加したイメージ要素に対してという理解で良いでしょうか。
確認はしていませんが、追加した要素に対してphotoSwipeメソッドを指定してやり、必要に応じてページにcreateメソッド発行すれば適用できるのでは。
どうしても上手くいかないようなら、また連絡いただければ時間がある時に見てみます。