slick(スライダー)の実装とオプションによるカスタマイズ方法(レスポンシブ対応)
slickはjQueryのスライダーを作成するためのプラグインです。レスポンシブにも対応しています。
slickは汎用性が高く、簡単に実装できるので、使いこなせるようになっておくとweb制作の幅が広がります。
slicknの公式サイトはこちら:http://kenwheeler.github.io/slick/
実装したいスライダー
今回は下記の画像のようなスライダーを実装します。
PCとモバイルで表示を少し変えています。
ファイルの読み込み
slickをダウンロードすることもできますが、今回はCDN(オンライン上にあるファイル)を使用します。
CSS
<!-- slick -->
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.css">
JS
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
crossorigin="anonymous"></script>
<!-- slick -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js"
integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- script -->
<script src="js/script.js"></script>
slickはjQueryも読み込まないと動作しないので忘れずに読み込んでください。
そして必ずjQueryを先に読み込むように上部に記述します。
HTML
<div class="slickBox">
<div id="js-slider" class="slider">
<div class="slider_img"><img src="img/cat1.jpg" alt=""><span class="caption">cat1</span></div>
<div class="slider_img"><img src="img/cat2.jpg" alt=""><span class="caption">cat2</span></div>
<div class="slider_img"><img src="img/cat3.jpg" alt=""><span class="caption">cat3</span></div>
<div class="slider_img"><img src="img/cat4.jpg" alt=""><span class="caption">cat4</span></div>
<div class="slider_img"><img src="img/cat5.jpg" alt=""><span class="caption">cat5</span></div>
<div class="slider_img"><img src="img/cat6.jpg" alt=""><span class="caption">cat6</span></div>
<div class="slider_img"><img src="img/cat1.jpg" alt=""><span class="caption">cat1</span></div>
<div class="slider_img"><img src="img/cat2.jpg" alt=""><span class="caption">cat2</span></div>
<div class="slider_img"><img src="img/cat3.jpg" alt=""><span class="caption">cat3</span></div>
<div class="slider_img"><img src="img/cat4.jpg" alt=""><span class="caption">cat4</span></div>
</div>
</div>
CSS(SCSS)
@use '../global'as g;
.slickBox {
width: 100%;
text-align: center;
.slider {
display: none;
opacity: 0;
transition: opacity .3s linear;
&.slick-initialized {
display: block;
opacity: 1;
}
.slick-slide {
margin: 0 12px;
width: 215px;
@include g.sp {
margin: 0 0.75rem;
width: 12.5rem;
}
.slider_img {
.caption {
display: block;
margin-top: 20px;
line-height: 1.5;
font-size: 16px;
font-weight: 500;
}
}
}
}
}
slickでハマってしまうことが多いのは、画像サイズの調整だと思います。
画像サイズを調整するのにどのクラスに記述すればいいのかがわかれば問題ないと思ってましたが、私はどっぷりハマってしまいました。
slickは勝手に「slick-slide」というクラス名のdivタグが生成されるので、画像の大きさを調整するときは「slick-slide」に記述。
そしてwidthの値は相対値ではなく、絶対値で記述しないとうまく動作しません。
つまり、「%」では動作しないので、「px」「rem」で記述。
.slider {
display: none;
opacity: 0;
transition: opacity .3s linear;
&.slick-initialized {
display: block;
opacity: 1;
}
この部分は、「一瞬画像が縦並びになってしまう場合の対処法」として記述してます。
JavaScript
$(function () {
$('#js-slider').slick({
autoplay: true, //自動再生
autoplaySpeed: 1000, //自動再生スピード
arrows: false, // 前・次のボタンを表示する
dots: false, // ドットナビゲーションを表示する
appendDots: $('.dots-2'), // ドットナビゲーションの生成位置を変更
speed: 500, // スライドさせるスピード(ミリ秒)
slidesToShow: 3, // 表示させるスライド数
centerPadding: '50%', //両サイドの見えている部分のサイズ
centerMode: true, // slidesToShowが奇数のとき、現在のスライドを中央に表示する
variableWidth: true, // スライド幅の自動計算を無効化
responsive: [
{
breakpoint: 768,
settings: {
slidesToShow: 1,
slidesToScroll: 1
}
}
]
});
});
slidesToShow: 3, // 表示させるスライド数
この部分は設定してあまり関係ないのかもしれません。
数値が奇数だと上手く動くとかいう人もいるので、あまり気にしなくてOK。
responsive: [
{
breakpoint: 768,
settings: {
slidesToShow: 1,
slidesToScroll: 1
}
}
]
この部分がレスポンシブ用の記述。
オプションのセッティング
slickはいろいろカスタマイズできます。
理想のスライダーを実装できるように、試行錯誤してトライしてみましょ。
$('#js-slider').slick({
accessibility: true,
adaptiveHeight: false,
autoplay: true,
autoplaySpeed: 3000,
arrows: true,
prevArrow: '<img class="slick-prev" src="img/prev.png">',
nextArrow: '<img class="slick-next" src="img/next.png">',
centerMode: false,
centerPadding: '50px',
cssEase: 'ease-in',
dots: true,
draggable: true,
fade: false,
slidesToShow: 1, //fade:false時のみ
easing: 'linear',
infinite: true,
edgeFriction: 0.15,
initialSlide: 0,
lazyLoad: 'ondemand',
mobileFirst: false,
pauseOnFocus: true,
pauseOnHover: true,
pauseOnDotsHover: true,
slidesToShow: 1,
slidesToScroll: 1,
speed: 300,
swipe: true,
touchMove: true,
variableWidth: false,
vertical: false,
verticalSwiping: false,
rtl: false,
zIndex: 1000,
});
自動再生関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
autoplay | true もしくは false | false | 自動再生させるか |
autoplaySpeed | 数値(ミリ秒) | 3000 | 画像を表示している時間 |
speed | 数値(ミリ秒) | 300 | 切り替え時の時間 |
画像切り替え時間とエフェクト関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
speed | 数値(ミリ秒) | 300 | 切り替え時の時間 |
cssEase | 文字列 | ‘ease’ | 画像切り替え時のイージングを CSS3 Animation Easing で指定 ‘linear’ ‘ease-in’ ‘ease-out’ ‘ease-in-out’ ‘cubic-bezier(x1, y1, x2, y2, ・・・ )’ ※3次ベジエ曲線の座標を指定 ※http://cubic-bezier.com/ |
fade | true もしくは false | false | 画像を切り替えをフェードイン・フェードアウトにさせるか |
easing | 文字列 | ‘linear’ | イージングを指定 |
縦方向移動関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
vertical | true もしくは false | false | 画像を縦方向に移動させる ※表示画像すべての高さが揃っていないと表示開始位置がずれるので注意 |
verticalSwiping | true もしくは false | false | スマホ使用時、縦方向スワイプに対応させる |
表示画像関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
slidesToShow | 数値 | 1 | 表示する画像の数 |
slidesToScroll | 数値 | 1 | 移動させる画像の数 |
variableWidth | true もしくは false | false | 通常カルーセル表示領域の幅より表示画像幅が狭いと白い余白が生まれるが、 true 指定時は次の画像が余白なしに表示される centerMode オプションと合わせて中央表示左右チラ見せさせることが多い |
centerMode | true もしくは false | false | 画像を中央表示させ centerMode オプションで前後の画像をチラ見させる カルーセル表示領域の幅が表示画像より広い場合は左に centerMode オプションで指定した余白が表示され左寄せになる そのためカルーセル表示領域の幅を可変させている時は variableWidth を有効にする |
centerPadding | 文字列 | ’50px’ | centerMode オプション有効時にどれくらいチラ見させるか(px もしくは %) |
スライド開始・終了関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
edgeFriction | integer | 0.15(秒数) | 無限スライドしない場合に端のスライドから更に進もうとした場合のバウンド処理の動作秒数 |
infinite | true もしくは false | true | 最後のスライドの次に最初のスライドを表示するか false指定時は最後まで進むと逆戻りする |
initialSlide | integer | 0 | 最初の表示画像の位置 ※0からカウントしているので注意 |
ページ下部ドット関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
dots | true もしくは false | false | カルーセル下にドットを表示させるか |
dotsClass | 文字列 | ‘slick-dots’ | カルーセル下のドット用リストのclass名を指定 |
一時停止関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
pauseOnHover | true もしくは false | true | 自動再生時、カルーセル上にマウスがある時に一時停止するか |
pauseOnDotsHover | true もしくは false | false | 自動再生時、下部ドットにマウスがある時に一時停止するか |
pauseOnFocus | true もしくは false | true | 自動再生時、カルーセルにフォーカスがある時に一時停止するか |
画像遅延読み込み関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
lazyLoad | ‘ondemand’または’progressive’ | ‘ondemand’ | 画像の遅延表示 img要素src属性に小さな透明画像を指定しdata-lazy属性に画像パスを記述する ※下記例では「images/brank.png」が小さな透明画像 例)<img data-lazy=”images/eyecatch01.png” src=”images/brank.png” alt=”アイキャッチ画像01″> ‘ondemand’は画像が表示されるタイミングでload処理 ‘progressive’はバックグラウンドでload処理 |
画像の高さ関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
adaptiveHeight | true もしくは false | false | カルーセルの高さを画像の高さに合わせて可変させる |
複数行関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
rows | int | 1 | 1以上に設定すると複数行で画像が表示される slidesPerRow オプションで各行に表示する画像数を設定 |
slidesPerRow | 数値 | 1 | rows オプションがtrue時有効 各行に表示する画像数を設定 |
キーボード・マウス操作関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
accessibility | true もしくは false | true | キーボード左右ボタンで画像の切り替えをさせる |
draggable | true もしくは false | true | ドラッグが可能か否か |
左右矢印関連
オプション名 | データ型 | 初期値 | 内容 |
---|---|---|---|
arrows | true もしくは false | true | 左右に「進む」「戻る」ボタンを表示させるか |
prevArrow | 文字列(文字もしくはHTMLタグ) | <button type=”button” class=”slick-prev”>Previous</button> | 「戻る」ボタンの変更 |
nextArrow | 文字列(文字もしくはHTMLタグ) | <button type=”button” class=”slick-next”>Next</button> | 「次へ」ボタンの変更 |