Fotoramaのサムネールナビゲーションのサムネール画像は、表示画像が多い場合、一度にすべてのサムネール画像を表示してくれません。
そこで、表示画像のすべてのサムネール画像を表示するサムネールナビゲーションを作ってみました。
サムネール画像の配置は、上、下、左や右と自由自在になります。また、上下に2分割などの配置も可能になります。
また、Fotoramのサムネールナビゲーションやドットナビゲーションと併用ができて操作性が上がります(ダブルナビゲーション)。
ただし、Fotorama表示画像とサムネール画像は別々に定義します。
自作サムネールナビゲーションの作り方
<!-- jQuery, --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- Fotorama --> <link href="http://cdnjs.cloudflare.com/ajax/libs/fotorama/4.5.2/fotorama.css" rel="stylesheet"> <script src="http://cdnjs.cloudflare.com/ajax/libs/fotorama/4.5.2/fotorama.js"></script>
<body onload="StartIndex(0)"> <!--(注1)onload=StartIndex(0) を記述します --> <!--(注2) Fotorama表示画像 ↓ --> <div class="fotorama" id="fotorama-divid" data-width="800" data-loop="true" data-fit="cover" data-keyboard="true" data-stopautoplayontouch="false" style="width:800px"> <img src="images/panorama/01.jpg"> <img src="images/panorama/02.jpg"> ・・・ ・・・ <img src="images/panorama/10.jpg"> </div> <hr width=800 align=left> <!--(注3) サムネール画像 ↓ --> <ul class="lilist thumbul"> <li class="thumbli" id="0" onclick="StartIndex(0)"><img src="images/panorama/01.jpg" title="1" width=150 height=75></li> <li class="thumbli" id="1" onclick="StartIndex(1)"><img src="images/panorama/02.jpg" title="2" width=150 height=75></li> ・・・ ・・・ <li class="thumbli" id="9" onclick="StartIndex(9)"><img src="images/panorama/10.jpg" title="10" width=150 height=75></li> </ul>
オプションdata-auto | API fatorama.startAutoplay | API fotorama.activeIndex | Fotoramaサムネールナビ |
false | ×動作しない | ×動作しない (単独使用の場合は正常) | ×表示されない |
true | 〇 | △ページロード後の0が来ない | 〇 |
オプション未定義 | 〇 | △ページロード後の0が来ない | 〇 |
※fatorama.startAutoplay;オートプレイ開始メソッド ※fotorama.activeIndex;選択した画像の番号(0~)取得メソッド |
/* 自作サムネールナビゲーション hover selected */ ul.thumbul{ list-style: none; margin: 0px 0px 0px 0px; padding: 5px; width:800px; /*自作サムネール画像領域の全体の長さ*/ background-color:#dcdcdc /*自作サムネール画像領域の背景の色*/ } ul.thumbul li.thumbli { margin: 0px 2px 0px 2px; /*1枚のサムネール画像領域の右左のマージン(注1)*/ padding: 3px 3px 3px 3px; /*1枚のサムネール画像領域の上下左右の余白(注2)*/ background-color:#dcdcdc; width: 150px; /*1枚のサムネール画像領域の長さ*/ height: 75px; /*1枚のサムネール画像領域の高さ*/ /*_width: 241px; 350px;*/ /*_height: 34px; 50px;*/ cursor:pointer; color:#333; } ul.thumbul li.thumbli:hover { background-color:yellow; /*サムネール画像にマウスオーバーのときの色(注2)/ } ul.thumbul li.thumbli.selected { background-color:#00bfff; /*-サムネール画像が選択状態のときの色(注2)*/ cursor:default; }
画像領域の全体の長さ800pxに、長さ150pxのサムネール画像を5枚配置すると、右側が大きく空いてします。
サムネール画像を5枚をきれいに配置するために、左右に5pxのマージンを取ります。
サムネール画像にマウスオーバー(hover)やクリック(selected)さしたときに状態マーク色を表示するための余白。
(上部青系色は選択された状態のカレント画像(3枚目)、黄色はマウスオーバーの状態の画像(4枚目))
HTML/Javascript/CSS
<body onload="StartIndex(0)"> <div class="fotorama" id="fotorama-divid" data-loop="true" data-width="800" data-fit="cover" data-keyboard="true" data-stopautoplayontouch="false" style="width:800px"> <img src="images/panorama/01.jpg" data-caption="1"> <!-- data-captiontタイトルはデモ用 --> <img src="images/panorama/02.jpg" data-caption="2"> <img src="images/panorama/03.jpg" data-caption="3"> <img src="images/panorama/04.jpg" data-caption="4"> <img src="images/panorama/05.jpg" data-caption="5"> <img src="images/panorama/06.jpg" data-caption="6"> <img src="images/panorama/07.jpg" data-caption="7"> <img src="images/panorama/08.jpg" data-caption="8"> <img src="images/panorama/09.jpg" data-caption="9"> <img src="images/panorama/10.jpg" data-caption="10"> </div> <hr width=800 align=left> <!-- サムネール ↓ --> <ul class="lilist thumbul"> <li id="0" class="thumbli" onclick="StartIndex(0)"><img src="images/panorama/01.jpg" title="1" width=150 height=75></li> <li id="1" class="thumbli" onclick="StartIndex(1)"><img src="images/panorama/02.jpg" title="2" width=150 height=75></li> <li id="2" class="thumbli" onclick="StartIndex(2)"><img src="images/panorama/03.jpg" title="3" width=150 height=75></li> <li id="3" class="thumbli" onclick="StartIndex(3)"><img src="images/panorama/04.jpg" title="4" width=150 height=75></li> <li id="4" class="thumbli" onclick="StartIndex(4)"><img src="images/panorama/05.jpg" title="5" width=150 height=75></li> <li id="5" class="thumbli" onclick="StartIndex(5)"><img src="images/panorama/06.jpg" title="6" width=150 height=75></li> <li id="6" class="thumbli" onclick="StartIndex(6)"><img src="images/panorama/07.jpg" title="7" width=150 height=75></li> <li id="7" class="thumbli" onclick="StartIndex(7)"><img src="images/panorama/08.jpg" title="8" width=150 height=75></li> <li id="8" class="thumbli" onclick="StartIndex(8)"><img src="images/panorama/09.jpg" title="9" width=150 height=75></li> <li id="9" class="thumbli" onclick="StartIndex(9)"><img src="images/panorama/10.jpg" title="10" width=150 height=75></li> </ul>
<script> //*** Autoplay start開始/stop停止(自作サムネールナビゲーションと関係ありません) //start $(function () { var $fotorama = $('#fotorama-divid'), fotorama = $fotorama.data('fotorama'); $('#button-autoplay').on('click', fotorama.startAutoplay); }); //stop $(function () { var $fotorama = $('#fotorama-divid'), fotorama = $fotorama.data('fotorama'); $('#button-stopautoplay').on('click', fotorama.stopAutoplay); }); //***自作サムネールナビゲーションイベントハンドラー(サムネール画像クリック) function StartIndex(p){ $(function(){ //画像スタートインデックス fotorama.show(p) var $fotorama = $('#fotorama-divid'), fotorama = $fotorama.data('fotorama'); fotorama.show(p); //選択された画像をFotorama画面に表示 //サムネールインデックス $("li.thumbli").removeClass("selected"); //すべてのサムネール画像の選択状態を一括削除 $("#" + p).addClass("selected"); //選択されたサムネール画像を選択状態に }); } //*** Fotoramアクティブインデックス イベントハンドラー(Fororama操作) $(function () { $('.fotorama') .on('fotorama:show', function (e, fotorama, direct) { StartIndex(fotorama.activeIndex); }) .fotorama(); //IDスセレクタ名fotoramaIndexでFotorama設定 }); </script>
<style type="text/css"> /* LIタグで横並びにする */ UL.lilist li { float: left; list-style-type: none; } UL.lilist { zoom:1; overflow: hidden;} /* 横並びの ClearHack */ /* 自作サムネールナビゲーション hover selected */ ul.thumbul{ list-style: none; margin: 0px 0px 0px 0px; padding: 5px; width:800px; background-color:#dcdcdc } ul.thumbul li.thumbli { margin: 0px 2px 0px 2px; padding: 3px 3px 3px 3px; background-color:#dcdcdc width: 150px; height: 75px; /*_width: 241px;*/ /*_height: 34px;*/ cursor:pointer; color:#333; } ul.thumbul li.thumbli:hover { background-color:yellow; } ul.thumbul li.thumbli.selected { background-color:#00bfff; cursor:default; } </style>
デモ(10枚)
photo by pixabay.com / powered by Fotorama (c) Artem Polikarpov