【jQuery】slickを使ってみよう⑤完

# 前回まで
前回までで主要なスライダーはほとんど作れるようになったと言っても過言ではないのではないでしょうか？？（過言すぎる）
今回は、demosにあるSlider Syncingを実装していこうと思います。

# Slider Syncingってなんだろ
Syncingの名の通り、スライダーとスライダーをSync（同期）させます。
英語が苦手な人は、シンクロナイズドスイミングを想像すると和訳がでてきやすいかも。

# 今回の目標
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="JojyabX" data-pen-title="my-slick005" data-user="Kei-Aoyama" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/Kei-Aoyama/pen/JojyabX">
  my-slick005</a> by yoruokamix (<a href="https://codepen.io/Kei-Aoyama">@Kei-Aoyama</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>

# 学習環境

### ディレクトリ構造
```
.
├── index.html
├── css/
│   └── style.css
├── js/
│   └── script.js
├── slick/
│   ├── slick.js
│   ├── slick.css
│   ├── slick-theme.css
│   └── …
└── img/
    ├── sample01.jpg
    ├── sample02.jpg
    └── sample03.jpg
```

### 最低限のリセットCSS+α
``` .css
*,
::before,
::after {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

ul,
ol {
  list-style: none;
}

/* 場合によっては上書きすることになるが一応入れておく */
img{
    width: 100%;
}
```

:::note warn
注意
リセットCSSは実際にslickを導入する環境に合わせる。
あとからリセットCSSを追加したり削除したりすると見た目が崩れることがあるので注意。
その場合、この記事の見た目と多少の違いが出ることがあります。
:::

# 実際に書いてみましょう
### slickの導入
記事①②を参考にslickを読み込んでください。

### HTML
```.html
<section class="slider-container">
    <div class="slider-for">
      <div><img src="./img/sample01.jpg" alt="スライド01"></div>
      <div><img src="./img/sample02.jpg" alt="スライド02"></div>
      <div><img src="./img/sample03.jpg" alt="スライド03"></div>
      <div><img src="./img/sample01.jpg" alt="スライド04"></div>
      <div><img src="./img/sample02.jpg" alt="スライド05"></div>
      <div><img src="./img/sample03.jpg" alt="スライド06s"></div>
    </div>
    <div class="slider-nav">
      <div class="slider-nav-item"><img src="./img/sample01.jpg" alt="スライド01"></div>
      <div class="slider-nav-item"><img src="./img/sample02.jpg" alt="スライド02"></div>
      <div class="slider-nav-item"><img src="./img/sample03.jpg" alt="スライド03"></div>
      <div class="slider-nav-item"><img src="./img/sample01.jpg" alt="スライド04"></div>
      <div class="slider-nav-item"><img src="./img/sample02.jpg" alt="スライド05"></div>
      <div class="slider-nav-item"><img src="./img/sample03.jpg" alt="スライド06"></div>
    </div>
  </section>
```
例のごとく準備した画像が足りなくて使いまわしていますが、皆様は好きな画像を沢山使ってくださいね(^_^;)

画面幅によって表示する画像を変えたい方は、pictureタグを使ってください。

メインのスライダーとナビゲーション用のスライダーの幅を揃えるために２つのslickコンテナを.slider-containerで包んでおきます。
### css

```.css
body{
  background: #ccc;
}

.slider-container{
  width: calc(100% - 100px);
  max-width: 1000px;
  margin: 0 auto;
}

.slider-for img,.slider-nav img{
  width: 100%;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}

.slider-nav-item{
  padding: 10px;
}
```
.slider-containerに対してwidth,max-widthとセンター寄せを指定しています。
.slider-navのアイテムには10pxのpaddingを付けてスライド間の余白を作ります。

### js
#### 初出のプロパティ
| setting-name | setting-value | 説明 |
|:-:|:-:|:-:|
| asNavFor  |  String(初期値はnull=空っぽ) |  このスライダーをsetting-valueのnav（ナビゲーション）として使う|
| focusOnSelect | true/false | クリック（選択）されたスライドにfocueする。<br>初期値はfalse。|
```.js
$(function () {
    //メインのスライダー
    $('.slider-for').slick({
        //.slider-navと同期する
        asNavFor: '.slider-nav',
        slidesToShow: 1,
        arrows: false,
        slidesToScroll: 1,
        arrows: false,
        fade: true,
    });
    
    //ナビゲーション用のスライダー
    $('.slider-nav').slick({
        //.slider-navと同期する
        asNavFor: '.slider-for',
        slidesToShow: 3,
        slidesToScroll: 1,
        dots: true,
        centerMode: true,
        focusOnSelect: true
    });
});
```
名前からするとナビゲーション用のスライダーにのみ設定すればいい感じがしますが、双方に設定する必要があります。説明すると難しいので、実際に確かめてみてください。その際、.slider-forのarrowsをtrueにしておくと確認しやすいです。

### 完成
![slick02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43453/e54ae265-61fc-43dd-9164-113efd35d6e1.gif)

## おまけ
### ボタンの色
我々をさんざっぱら苦しめてきた白色のボタンを任意の色に変える方法をお伝えします。
と言っても検証ツールで見てもらえば一発なのですが、

![スクリーンショット 2025-03-10 18.59.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43453/3962e0da-6aa0-4bba-ac53-a63fda39308c.png)

ここですね。
slick-theme.cssを読み込まなかった場合にも、このように検証ツールで要素とclass名を探していくことになります。
```.css
.slick-prev:before,.slick-next:before{
    color:#000;
}
```
このように任意の色で上書きしてあげれば……

### slickフォント
slickのarrowsを見てみるとcontent:'→'になっているのですが、表示されているのは素の矢印じゃなくてなんかいいかんじの矢印ボタンですよね。これを実現しているのがslickフォントです。
まあでも矢印の種類がたくさんあるわけでもないみたい。
もっとカスタムしたい方は、slick-theme.cssに頼らず、Cゴリゴリ書いてみましょう。

# おわりに
５回に渡って学習してきたslickの使い方も今回で最後になります。
他にも作りたいものがあったら、まずは公式ドキュメントを読んでみるクセを付けてみてください。
これは他のプラグインでも同じです。
それでもわからなかったら、記事やchatGPTを活用しましょう。

お読みいただきありがとうございました。