jQuery プラグイン fancyBox の基本的な使い方や設定に関する個人的なメモ。この時点での fancyBox のバージョンは「v2.1.5」。
関連ページ:「jQuery fancyBox v1.3.4 の使い方や設定」
目次
fancyBox のページの「license & download」をクリックし、「Download v2.1.5」をクリックしてダウンロード。
ライセンス:Attribution-NonCommercial 3.0 Unported(表示 – 非営利 3.0 非移植 )
You are free to use fancyBox for your personal or non-profit website projects.
You can get the author’s permission to use fancyBox for commercial websites by paying a fee.
個人的、非営利の場合の使用は自由。商用(営利目的)の場合は有料(fancyBox Single Domain License $19.00)ということらしい。
fancyBox をダウンロードして解凍したフォルダの中身。
以下は source フォルダの中身。
以下はダウンロードして解凍下フォルダを「fancybox」という名前で保存した場合の例。パスは自分の環境に合わせて変更。またファイルを移動した場合はそれに合わせてパスを変更する必要あり。
<!-- オプションを使用しない場合 --> <!-- jQuery の読み込み(必須) --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <!-- fancyBox の読み込み(必須)--> <link rel="stylesheet" href="fancybox/source/jquery.fancybox.css" type="text/css" media="screen" /> <script type="text/javascript" src="fancybox/source/jquery.fancybox.pack.js"></script>
以下はオプションのファイルを読み込む例。
<!-- jQuery の読み込み(必須) --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <!-- Add mousewheel plugin (オプションのマウスホイールプラグイン) --> <script type="text/javascript" src="/fancybox/lib/jquery.mousewheel-3.0.6.pack.js"></script> <!-- fancyBox の読み込み(必須) --> <link rel="stylesheet" href="/fancybox/source/jquery.fancybox.css?v=2.1.5" type="text/css" media="screen" /> <script type="text/javascript" src="/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script> <!-- オプショナルの helpers - button, thumbnail and/or media --> <link rel="stylesheet" href="/fancybox/source/helpers/jquery.fancybox-buttons.css?v=1.0.5" type="text/css" media="screen" /> <script type="text/javascript" src="/fancybox/source/helpers/jquery.fancybox-buttons.js?v=1.0.5"></script> <script type="text/javascript" src="/fancybox/source/helpers/jquery.fancybox-media.js?v=1.0.6"></script> <link rel="stylesheet" href="/fancybox/source/helpers/jquery.fancybox-thumbs.css?v=1.0.7" type="text/css" media="screen" /> <script type="text/javascript" src="/fancybox/source/helpers/jquery.fancybox-thumbs.js?v=1.0.7"></script>
この場合、ポップアップされた画像には「次へ」や「前へ」の矢印は表示されない。
リンク要素(a 要素)の href 属性に fancyBox で表示する画像等のパスを指定し、適当なクラス(この例では .fancybox)を指定する。
<a class="fancybox" href="images/large/1.jpg"><img src="images/small/1.jpg" alt="" /></a> <a class="fancybox" href="images/large/2.jpg"><img src="images/small/2.jpg" alt="" /></a>
この場合、ポップアップされた画像には「次へ」や「前へ」の矢印が表示される。
方法1.
a 要素の rel 属性に同じ値・文字列(何でもOK)を指定。以下は「rel=”group1″」と指定した場合。
但しこの方法だと W3C のチェックで以下のようなエラーになる。
「Bad value group1 for attribute rel on element a: The string group1 is not a registered keyword.」
<a class="fancybox" rel="group1" href="images/large/1.jpg"><img src="images/small/1.jpg" alt="" /></a> <a class="fancybox" rel="group1" href="images/large/2.jpg"><img src="images/small/2.jpg" alt="" /></a>
方法2.
a 要素の data-fancybox-group 属性に同じ値・文字列(何でもOK)を指定。以下は「data-fancybox-group=”group2″」と指定した場合。
<a class="fancybox" data-fancybox-group="group2" href="images/large/1.jpg"><img src="images/small/1.jpg" alt="" /></a> <a class="fancybox" data-fancybox-group="group2" href="images/large/2.jpg"><img src="images/small/2.jpg" alt="" /></a>
a 要素の title 属性にキャプションで表示する文字列を設定
<a class="fancybox" data-fancybox-group="group3" href="images/large/1.jpg" title="金閣寺"><img src="images/small/1.jpg" alt="" /></a> <a class="fancybox" data-fancybox-group="group3" href="images/large/2.jpg" title="竜安寺"><img src="images/small/2.jpg" alt="" /></a>
fancyBox のイニシャライズ(初期設定)を jQuery で記述。リンク要素に指定したクラスの要素(この例では.fancybox)に対して .fancybox() を実行。
<link rel="stylesheet" href="fancybox/source/jquery.fancybox.css" type="text/css" media="screen" /> <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script type="text/javascript" src="fancybox/source/jquery.fancybox.pack.js"></script> <script> jQuery(function($){ $(".fancybox").fancybox(); }); </script>
これだけで Lightbox 表示が可能。
ギャラリー表示(複数の画像をグループ化)する場合に、a 要素の rel 属性に値を指定すると W3C でエラーになってしまうと書いたが、イニシャライズする際に、jQuery の attr を使って rel 属性を指定することもできる。
HTML では、rel 属性を指定しない。
HTML
<a class="fancybox" href="images/large/1.jpg"><img src="images/small/1.jpg" alt="" /></a> <a class="fancybox" href="images/large/2.jpg"><img src="images/small/2.jpg" alt="" /></a>
イニシャライズする際に、以下のようにする。
<script> jQuery(function($){ $(".fancybox").attr('rel','group').fancybox(); }); </script>
以下の方法で CSS の ‘background’ を使って色や透明度を変更可能。
$(".fancybox").fancybox({ helpers : { overlay : { css : { 'background' : 'rgba(58, 42, 45, 0.35)' } } } });
Change overlay color and opacity
このようなカスタマイズ例は「Tips & tricks」に色々掲載されている。
効果(エフェクト)のオプションは以下のようなものがある(他にもあり)。
オプション | 指定可能な値 | デフォルト値 |
---|---|---|
openEffect | ‘elastic’, ‘fade’ or ‘none’ | ‘fade’ |
closeEffect | ‘elastic’, ‘fade’ or ‘none’ | ‘fade’ |
nextEffect | ‘elastic’, ‘fade’ or ‘none’ | ‘elastic’ |
prevEffect | ‘elastic’, ‘fade’ or ‘none’ | ‘elastic’ |
openSpeed | ミリ秒で指定。または “slow”, “normal”, “fast” | 250 |
closeSpeed | ミリ秒で指定。または “slow”, “normal”, “fast” | 250 |
nextSpeed | ミリ秒で指定。または “slow”, “normal”, “fast” | 250 |
prevSpeed | ミリ秒で指定。または “slow”, “normal”, “fast” | 250 |
表示時とクローズ時のエフェクトを変更する例。
<script> jQuery(function($){ $(".fancybox").fancybox({ openEffect : 'elastic', openSpeed : 400, closeEffect : 'elastic', closeSpeed : 300 }); }); </script>
Fade content when changing gallery items
大きさの異なる画像などを表示する際に良いかも知れないカスタマイズ例。
「resizeIn」という「transitions」を定義して、それを指定する。
(function ($, F) { F.transitions.resizeIn = function() { var previous = F.previous, current = F.current, startPos = previous.wrap.stop(true).position(), endPos = $.extend({opacity : 1}, current.pos); startPos.width = previous.wrap.width(); startPos.height = previous.wrap.height(); previous.wrap.stop(true).trigger('onReset').remove(); delete endPos.position; current.inner.hide(); current.wrap.css(startPos).animate(endPos, { duration : current.nextSpeed, easing : current.nextEasing, step : F.transitions.step, complete : function() { F._afterZoomIn(); current.inner.fadeIn("fast"); } }); }; }(jQuery, jQuery.fancybox)); jQuery(function($){ $(".fancybox").fancybox({ nextMethod : 'resizeIn', nextSpeed : 250, prevMethod : false }); });
以下のプラグインを使用すると、いろいろなアニメーション効果を適用できる。
Fancybox transitions のダウンロード: GitHub
ダウンロードしたら、jquery.fancybox-transitions.js と jquery.fancybox-transitions.css を読み込む。
<!-- Add jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <!-- Add fancyBox --> <link rel="stylesheet" href="/css/jquery.fancybox.css?v=2.1.5" type="text/css" media="screen" /> <script type="text/javascript" src="/js/jquery.fancybox.pack.js?v=2.1.5"></script> <!--Add Fancybox transitions ダウンロードしたプラグインファイルの読み込み--> <link rel="stylesheet" href="/css/jquery.fancybox-transitions.css?v=0.1" type="text/css" media="screen" /> <script src="/js/jquery.fancybox-transitions.js?v=0.1"></script>
あとは openMethod や closeMethod に適用したい効果を指定する。
$('.fancybox').fancybox({ openMethod: 'superscaleIn', closeMethod: 'superscaleOut' });
nextMethod や prevMethod にも指定できるようだが、期待通りの効果にならない場合もあるみたい。
$('.fancybox').fancybox({ openMethod: 'newspaperIn', nextMethod: 'superscaleIn', prevMethod: false, closeMethod: 'newspaperOut' });
Fancybox transitions プラグインに含まれているトランジション効果
YouTube を表示する例。
クラス属性に「fancybox.iframe」を追加するか、data-fancybox-type 属性に「iframe」を指定する。
href 属性に YouTube の埋め込みコードを設定。
必要に応じて autoplay=1(自動再生) または autoplay=0(自動再生なし)を指定。
HTML
<ul> <li><a class="youtube fancybox.iframe" href="//www.youtube.com/embed/Yk-GTl2JZCc?autoplay=1">And I Love Her </a></li> <li><a class="youtube" data-fancybox-type="iframe" href="//www.youtube.com/embed/jkinLvUrUYE?autoplay=1">Summertime </a></li> </ul>
グループ化することも可能。この場合は autoplay=0(自動再生なし)を指定したほうがよいと思う。(そうしないとポーズをクリックすると次の映像に移ってしまう)
<ul> <li><a class="youtube fancybox.iframe" data-fancybox-group="group1" href="//www.youtube.com/embed/Yk-GTl2JZCc?autoplay=0">And I Love Her </a></li> <li><a class="youtube" data-fancybox-type="iframe" data-fancybox-group="group1" href="//www.youtube.com/embed/jkinLvUrUYE?autoplay=0">Summertime </a></li> </ul>
jQuery
<script> jQuery(function($){ $(".youtube").fancybox({ maxWidth : 800, maxHeight : 600, fitToView : false, width : '70%', height : '70%', autoSize : false, closeClick : false, openEffect : 'none', closeEffect : 'none', nextEffect : 'none', //グループ化した場合 //グループ化した場合 prevEffect : 'none' }); }); </script>
Google Map を表示する例。
クラス属性に「fancybox.iframe」を追加するか、data-fancybox-type 属性に「iframe」を指定する。
href 属性に Google Map の埋め込みコードを設定。
Google Map の埋め込みコードは目的の Google Map を開いて、画面右下のほうにある歯車のアイコンをクリック。
「地図を共有または埋め込む」をクリック。
「地図を埋め込む」をクリック。
表示される iframe の href 属性の部分をコピーして a 要素の href 属性にペースト。
HTML
<ul> <li> <a class="gmap fancybox.iframe" href="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d6479.273177500845!2d139.81066781349247!3d35.710559560288075!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188ed0d12f9adf%3A0x7d1d4fb31f43f72a!2z5p2x5Lqs44K544Kr44Kk44OE44Oq44O8!5e0!3m2!1sja!2sjp!4v1419872619501">Google maps (iframe)</a> </li> </ul>
jQuery
<script> jQuery(function($){ $(".gmap").fancybox({ maxWidth : 1200, maxHeight : 800, fitToView : false, width : '90%', height : '90%', autoSize : false, closeClick : false, openEffect : 'none', closeEffect : 'none' }); }); </script>