jQuery Web制作

slickでメイン画像とサブ画像が連動するスライドショー

2023年3月21日

※ 当サイトではアフィリエイト広告を利用しています

この記事では「slickでメイン画像とサブ画像が連動するスライドショー」について解説します。

slickはjQueryに依存し簡単にスライドショーを実装することができます。slickはさまざまカスタマイズ方法があるので、覚えておきましょう。

slickでメイン画像とサブ画像が連動するスライドショーの実装方法

結論からいうと、次のようなコードになります。

〇 index.html

<div class="l-container">
    <div class="p-slider js-slick-slide">
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test1.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test3.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </div>
    </div>
    <ul class="p-cards p-thumbnail">
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test1.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test3.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </li>
    </ul>
  </div>

〇 style.css

.l-container {
  max-width: 400px;
  margin-right: auto;
  margin-left: auto;
}

.p-cards {
  width: 100%;
  height: 100%;
  margin: auto;
}

.p-cards__item {
  margin-right: 10px;
}

.p-cards__item img {
  width: 100%;
  height: 100%;
  display: block;
}

.p-thumbnail {
  margin-top: 10px;
  max-width: 85%;
}

.slick-prev {
  left: -30px;
}

.slick-next {
  right: -20px;
}

.slick-next::before,.slick-prev::before {
  background: gray;
}

〇 main.js

$('.js-slick-slide').slick({
  autoplay: true,
  dots: true,
  arrows:false,
  asNavFor: ".p-thumbnail",
});


$(".p-thumbnail").slick({
  slidesToShow: 3,
  asNavFor: ".js-slick-slide",
  focusOnSelect: true,
  arrows: true,
});

メインスライドが動くと、メイン画像直下のサブ画像も連動して動きます。サブ画像左右の矢印をクリックしても、メイン画像もスライドします。

なお、slickはjQueryが必須となるのでheadタグの中に下記を記述します。

<!-- jQueryのCDN -->
<script src="https://code.jquery.com/jquery-3.6.4.slim.min.js"
    integrity="sha256-a2yjHM4jnF9f54xUQakjZGaqYs/V1CYvWpoqZzC2/Bw=" crossorigin="anonymous"></script>

<!-- SlickのCDNファイル -->
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" />
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>

スライドショーのHTML構造

イメージとしては次のようになります。

slickのHTML構造イメージ

メイン画像とサブ画像スライドのHTML構造は下記になります。

メイン画像はp-slider要素の中に格納し、サブ画像はp-thumbnail要素の中に格納しています。

<div class="l-container">
    <!-- メイン画像 -->
    <div class="p-slider js-slick-slide">
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test1.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test3.jpg" alt="">
        </div>
      </div>
      <div class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </div>
    </div>


    <!-- サブ画像 -->
    <ul class="p-cards p-thumbnail">
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test1.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test3.jpg" alt="">
        </div>
      </li>
      <li class="p-cards__item p-card">
        <div class="p-card__img">
          <img src="images/test2.jpg" alt="">
        </div>
      </li>
    </ul>
  </div>

js-slick-slideは、JavaScriptのslickの記述でスライドの要素を取得するために記述しておきます。

slickのコード部分

slickの記述は下記になります。

$('.js-slick-slide').slick({
  autoplay: true, // 自動再生
  dots: true, //ドットのナビ表示
  arrows:false,
  asNavFor: ".p-thumbnail", // サムネイルと同期
});

// サムネイルのオプション
$(".p-thumbnail").slick({
  slidesToShow: 3, // サムネイルの表示数
  asNavFor: ".js-slick-slide", // メイン画像と同期
  focusOnSelect: true, // サムネイルクリックを有効化
  arrows: true, // 前・次のスライド切り替える矢印表示
});

下記の部分で、メイン画像のスライドを取得しています。そのさいに、asNavForオプションでサブ画像のp-thumbnail要素と同期する記述をしています。

$('.js-slick-slide').slick({
  autoplay: true, // 自動再生
  dots: true, //ドットのナビ表示
  arrows:false,
  asNavFor: ".p-thumbnail", // サムネイルと同期
});

下記の部分で、サブ画像のサムネイルを取得しています。そのさいに、asNavForオプションでメイン画像のjs-slick-slide要素と同期する記述をしています。

// サムネイルのオプション
$(".p-thumbnail").slick({
  slidesToShow: 3, // サムネイルの表示数
  asNavFor: ".js-slick-slide", // メイン画像と同期
  focusOnSelect: true, // サムネイルクリックを有効化
  arrows: true, // 前・次のスライド切り替える矢印表示
});

CSSでスタイル調整

矢印やサブ画像サムネイル部分は下記の記述で調整できます。

.p-thumbnail {
  margin-top: 10px;
  max-width: 85%;
}

.slick-prev {
  left: -30px;
}

.slick-next {
  right: -20px;
}

.slick-next::before,.slick-prev::before {
  background: gray;
}

まとめ

slickでメイン画像とサブ画像が連動するスライドショーの実装法について解説しました。slickはオプションしだいでさまざまなカスタマイズができます。実際に手を動かして実装してみましょう。

  • この記事を書いた人
アバター画像

こうだい

兼業でWeb制作事業|31歳|本業畑違いで知識0から学習開始→1年目で初案件獲得→2年で月の兼業受注金額70万円達成|4年目で100万円達成|兼業でも稼げることを確信|Web制作メンター|制作費無料のホームページ制作事業運営|コーディング・ホームページ制作についてお気軽にお問い合わせください

-jQuery, Web制作
-