ECサイトの商品詳細画面などでよく見かける、サムネイル画像をクリックすると画像が切り替わるBOXを作りました。
作りましたと言っても、こちら「タブの切替 | よく使うjQuery」を流用させていただきました。
かなりシンプルなソースで、指定しているスタイルに影響を与えないので自由にCSSをカスタマイズできます。素晴らしい!
Jqueryを使ったサムネイル画像をクリックして、複数のイメージを切り替える手法は数多くWEBに公開されていましたが、あらかじめスタイルが指定されていたり、フェードアウトで画像が切り替わる、といった感じの物がほとんでした。
ここで紹介するのは画像クリックでフェードアウトするといったアクション要素はありませんが、シンプルかつ拡張性(デザイン)の高いBOXです。
レスポンシブデザイン用のソースもあります、よければご活用下さい。
PR
横幅300pxを指定したBOXの場合、こんな感じです。
<script> $(function() { $("#tab li").click(function() { var num = $("#tab li").index(this); $(".content_wrap").addClass('disnon'); $(".content_wrap").eq(num).removeClass('disnon'); $("#tab li").removeClass('select'); $(this).addClass('select') }); }); </script>
.disnon{ display: none; } .item_box{ width:300px; margin:auto; padding:10px; border:solid 1px #EEE; } .image_box{ width:280px; margin-bottom:20px; } .image_box img{ width:100%; } #tab:after{ content:""; clear:both; height:0; display:block; visibility:hidden; } #tab li{ float:left; width:69px; list-style-type:none; } #tab li:hover{ border:solid 5px #428bca; cursor:pointer; }
display: none;
を指定しているので、非表示になりますfloat
の回り込みを解除しています。li
要素にカーソルがあたった場合、ポインターを表示しつつ、識別しやすいよう枠線を表示します。<div class="item_box"> <div class="image_box"> <img src="https://junk-blog.com/wp-content/uploads/2014/10/black_sample.jpg" alt="black_sample" class="content_wrap" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/blue_sample.jpg" alt="blue_sample" class="content_wrap disnon" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/green_sample.jpg" alt="green_sample" class="content_wrap disnon" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/red_sample.jpg" alt="red_sample" class="content_wrap disnon" /> </div> <ul id="tab"> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/black_sample.jpg" alt="black_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/blue_sample.jpg" alt="blue_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/green_sample.jpg" alt="green_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/red_sample.jpg" alt="red_sample" /></li> </ul> </div>
「.item_box」というブロック要素の中に大きく分けて「.image_box」「#tab」という2つの要素があります。
「.image_box」は、メインとなる画像が表示される領域。
「#tab」はサムネイル画像が表示される領域になります。
「.image_box」内クラス解説
レスポンシブデザインだとこんな感じです。
PCから閲覧されている場合、ブラウザの横幅を伸縮することで端末のサイズによって、BOXが変化しているのがわかると思います。
.responsive_box{ width:100%; padding:10px; border:solid 1px #EEE; } .responsive_image_box{ width:100%; margin-bottom:20px; } .responsive_image_box img{ width:100%; } #responsive_tab:after{ content:""; clear:both; height:0; display:block; visibility:hidden; } #responsive_tab li{ float:left; width:25%; list-style-type:none; } #responsive_tab li:hover{ border:solid 5px #428bca; cursor:pointer; }
ハイライトしている行が変更のあったスタイルになります。
クラス名以外width
しか変更していませんが、これだけでレスポンシブデザインに対応できます。
<div class="responsive_box"> <div class="responsive_image_box"> <img src="https://junk-blog.com/wp-content/uploads/2014/10/black_sample.jpg" alt="black_sample" class="responsive_wrap" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/blue_sample.jpg" alt="blue_sample" class="responsive_wrap disnon" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/green_sample.jpg" alt="green_sample" class="responsive_wrap disnon" /> <img src="https://junk-blog.com/wp-content/uploads/2014/10/red_sample.jpg" alt="red_sample" class="responsive_wrap disnon" /> </div> <ul id="responsive_tab"> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/black_sample.jpg" alt="black_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/blue_sample.jpg" alt="blue_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/green_sample.jpg" alt="green_sample" /></li> <li><img src="https://junk-blog.com/wp-content/uploads/2014/10/red_sample.jpg" alt="red_sample" /></li> </ul> </div>
htmlもクラス名のみ変更しています。
<script> $(function() { $("#responsive_tab li").click(function() { var num = $("#responsive_tab li").index(this); $(".responsive_wrap").addClass('disnon'); $(".responsive_wrap").eq(num).removeClass('disnon'); $("#responsive_tab li").removeClass('select'); $(this).addClass('select') }); }); </script>
はじめに説明した箇所を変更しています。
僕の場合、ECサイトを構築する事がよくあるので、頻繁に使うテクニックです。
お客さんに見せたい画像の枚数が多いんだけど、全て表示するとデザイン的にあれだなぁー、なんてことがよくある商品詳細ページなどで大いに役立ってくれます。
カスタマイズしやすい、シンプルなソースになっていると思うので、宜しければカスタマイズして自由にお使いください:)
コメント