【HTML+CSS+jQuery】slick(スライダー)の実装とオプションによるカスタマイズ方法(レスポンシブ対応)

slick(スライダー)の実装とオプションによるカスタマイズ方法(レスポンシブ対応)

slickはjQueryのスライダーを作成するためのプラグインです。レスポンシブにも対応しています。

slickは汎用性が高く、簡単に実装できるので、使いこなせるようになっておくとweb制作の幅が広がります。

slicknの公式サイトはこちら:http://kenwheeler.github.io/slick/

実装したいスライダー

今回は下記の画像のようなスライダーを実装します。

slick PC
slick PC
slick SP
slick SP

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,
});

自動再生関連

オプション名データ型初期値内容
autoplaytrue もしくは falsefalse自動再生させるか
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/
fadetrue もしくは falsefalse画像を切り替えをフェードイン・フェードアウトにさせるか
easing文字列‘linear’イージングを指定

縦方向移動関連

オプション名データ型初期値内容
verticaltrue もしくは falsefalse画像を縦方向に移動させる ※表示画像すべての高さが揃っていないと表示開始位置がずれるので注意
verticalSwipingtrue もしくは falsefalseスマホ使用時、縦方向スワイプに対応させる

表示画像関連

オプション名データ型初期値内容
slidesToShow数値1表示する画像の数
slidesToScroll数値1移動させる画像の数
variableWidthtrue もしくは falsefalse通常カルーセル表示領域の幅より表示画像幅が狭いと白い余白が生まれるが、 true 指定時は次の画像が余白なしに表示される
centerMode オプションと合わせて中央表示左右チラ見せさせることが多い
centerModetrue もしくは falsefalse画像を中央表示させ centerMode オプションで前後の画像をチラ見させる
カルーセル表示領域の幅が表示画像より広い場合は左に centerMode オプションで指定した余白が表示され左寄せになる
そのためカルーセル表示領域の幅を可変させている時は variableWidth を有効にする
centerPadding文字列’50px’centerMode オプション有効時にどれくらいチラ見させるか(px もしくは %)

スライド開始・終了関連

オプション名データ型初期値内容
edgeFrictioninteger0.15(秒数)無限スライドしない場合に端のスライドから更に進もうとした場合のバウンド処理の動作秒数
infinitetrue もしくは falsetrue最後のスライドの次に最初のスライドを表示するか
false指定時は最後まで進むと逆戻りする
initialSlideinteger0最初の表示画像の位置 ※0からカウントしているので注意

ページ下部ドット関連

オプション名データ型初期値内容
dotstrue もしくは falsefalseカルーセル下にドットを表示させるか
dotsClass文字列‘slick-dots’カルーセル下のドット用リストのclass名を指定

一時停止関連

オプション名データ型初期値内容
pauseOnHovertrue もしくは falsetrue自動再生時、カルーセル上にマウスがある時に一時停止するか
pauseOnDotsHovertrue もしくは falsefalse自動再生時、下部ドットにマウスがある時に一時停止するか
pauseOnFocustrue もしくは falsetrue自動再生時、カルーセルにフォーカスがある時に一時停止するか

画像遅延読み込み関連

オプション名データ型初期値内容
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処理

画像の高さ関連

オプション名データ型初期値内容
adaptiveHeighttrue もしくは falsefalseカルーセルの高さを画像の高さに合わせて可変させる

複数行関連

オプション名データ型初期値内容
rowsint11以上に設定すると複数行で画像が表示される
slidesPerRow オプションで各行に表示する画像数を設定
slidesPerRow数値1rows オプションがtrue時有効
各行に表示する画像数を設定

キーボード・マウス操作関連

オプション名データ型初期値内容
accessibilitytrue もしくは falsetrueキーボード左右ボタンで画像の切り替えをさせる
draggabletrue もしくは falsetrueドラッグが可能か否か

左右矢印関連

オプション名データ型初期値内容
arrowstrue もしくは falsetrue左右に「進む」「戻る」ボタンを表示させるか
prevArrow文字列(文字もしくはHTMLタグ)<button type=”button” class=”slick-prev”>Previous</button>「戻る」ボタンの変更
nextArrow文字列(文字もしくはHTMLタグ)<button type=”button” class=”slick-next”>Next</button>「次へ」ボタンの変更