slickでスライドショー(バリエーション)
複数枚の画像を表示するスライダー
jQueryのスライダープラグインslick
で画像スライダーを作るの続き。今度は別パターン。
画像を3枚づつ表示させてクリックすると3枚ずつスライドしていく。
HTMLは前の記事とほぼ同じ。 UL>LIで並べた画像のリストを5枚では物足りないので15枚に増やした。 リストの変更部分のみ省略して載せる。
[sample05.html]
<body> <div id="main"> <!-- imgタグを含むliタグで画像を15枚列挙 --> <ul class="slick-slider"> <li class="slick-item"> <a href="#"><img class="sample-img" src="images/001.jpg"></a> </li> <li class="slick-item"> <a href="#"><img class="sample-img" src="images/002.jpg"></a> </li> ..............................(省略).............................. <li class="slick-item"> <a href="#"><img class="sample-img" src="images/014.jpg"></a> </li> <li class="slick-item"> <a href="#"><img class="sample-img" src="images/015.jpg"></a> </li> </ul> </div> </body> </html>
もっと増えたら書くのも大変なのでfor文などが使えるテンプレートシステムやJavaScript側で工夫するとよいかも。
jsファイル側の記述はslick
に渡すオプションがやや増える。
[sample05.js]
$(function() { $('.slick-slider').slick({ dots: true, infinite: true, slidesToShow: 3, slidesToScroll: 3 }); });
各オプションの意味。dots
は前の記事に書いた。
オプション | 意味 |
---|---|
infinite | trueで無限ループ |
slidesToShow | 一度に表示する枚数 |
slidesToScroll | 一度にスクロールする枚数 |
画像3つ分の幅が必要なのでCSSも若干修正する。
[sample05.css]
#main { width: 680px; height: auto; } ....................(省略)....................
画像の左右にある小さな矢印をクリックすると、画像が3つづつ切り替わる。
slidesToScrollオプションの設定を1にして、クリックすると1枚づつ動いていくようにしたのがこちら。
[sample06.js]
$(function() { $('.slick-slider').slick({ dots: true, infinite: true, slidesToShow: 3, slidesToScroll: 1 }); });
3枚づつ動く設定の時は15枚を3で割った5つのドットが現れたが、こんどは15枚一つづつなのでドットも15個。ちなみに任意のドットをクリックしても、そこの画像を左の先頭に表示する。
センターモード
奇数枚の画像をスライドさせるときに、現在アクティブな画像をスライドの真ん中に表示させるには、オプションでcenterMode: true
を渡す。
偶数枚の場合どうなるかやってみたら、中心にくる2枚の右側にアクティブな画像が来た。要するにターゲット画像の左端が中心に来るってことだろう。
centerMode: true
を指定せずに、slidesToShow: 3
などで複数枚数のスライドにした場合、単に3枚が並ぶが、centerPadding: 数値
でさらにその両側の画像をどこまで覗かせるかを指定できる。
指定しないとcenterPadding: 0px
を指定したのと同じで、centerPadding
のデフォルト値は50px。px または % で指定できる。
次のサンプルでは40pxを指定して、3枚の両側をのぞかせている。スライダー全体はdiv id="main"
で取り囲まれている。#mainの幅はcssで680pxで指定しており、これはslickの仕組みとは関係なくこちらで調整して決めた幅。``centerPadding```で余白幅の数値を指定しても全体の680pxは変化せず、パディングも含めた幅が680pxになるようslickが調整してくれているみたいで、その分高さが減少している。
[sample06-2.js]
$(function() { $('.slick-slider').slick({ dots: true, infinite: true, slidesToShow: 3, slidesToScroll: 1, centerMode: true, centerPadding: '40px', }); });