【slick】真ん中だけ大きくするスライダーの作り方

【slick】真ん中だけ大きくするスライダーの作り方

ウェブサイトのデザインにおいて、スライダーは視覚的なインパクトを与え、ユーザーの注意を引きつける重要な要素です。slickスライダーはその柔軟性とカスタマイズ性から、多くの開発者に利用されています。本記事では、真ん中のスライドだけを大きく表示するスライダーの作り方を、具体的な手順とコード例を交えて詳しく解説します。

真ん中だけ大きくするスライダーとは

真ん中だけ大きくするスライダーは、中央のスライドを他のスライドよりも大きく表示することで、視覚的な焦点を中央に集めるスライダーです。このデザインは、製品ギャラリーやポートフォリオ、特集記事の紹介などに効果的です。ユーザーにとって視覚的に魅力的で、重要なコンテンツを強調することができます。

基本設定

下記にてslickの基本を紹介していますのでご覧ください。

CodePen ソースコードサンプル

HTML構造の設定

<div class="carousel slick">
  <div><img src="https://web-developer-note.com/codepen/images/slide01.jpg" alt="スライド1" width="600" height="400" class="imgauto"></div>
  <div><img src="https://web-developer-note.com/codepen/images/slide02.jpg" alt="スライド2" width="600" height="400" class="imgauto"></div>
  <div><img src="https://web-developer-note.com/codepen/images/slide03.jpg" alt="スライド3" width="600" height="400" class="imgauto"></div>
  <div><img src="https://web-developer-note.com/codepen/images/slide04.jpg" alt="スライド4" width="600" height="400" class="imgauto"></div>
  <div><img src="https://web-developer-note.com/codepen/images/slide05.jpg" alt="スライド5" width="600" height="400" class="imgauto"></div>
</div>

CSSのカスタマイズ

スライダーの外観を整えるために、CSSでスタイリングを行います。特に、スライドのサイズと中央スライドの強調表示を実現します。

.carousel .slick-slide {
  margin-inline: 10px;
  transition: all 0.3s ease;
  transform: scale(0.9);
}

.carousel .slick-slide.slick-current,
.carousel .slick-slide.is-active-next {
  transform: scale(1);
}

解説:

  • .carousel .slick-slide: 各スライドに左右のマージンを設定し、スムーズなトランジションと縮小効果を適用しています。これにより、非中央スライドが小さく表示されます。
  • .slick-current.is-active-next: 現在の中央スライドと次にアクティブになるスライドに対して、縮小効果を解除し、スライドを通常のサイズに戻します。これにより、中央スライドが強調表示されます。

slickの初期化

中央スライドをさらに強調表示し、無限ループ時の動作を滑らかにするために、JavaScriptで動的にクラスを管理します。この実装により、通常のループでは2周目でスライダーがガタつく問題を解消します。

  $(document).ready(function () {
    const $carousel = $(".carousel");
    $carousel.on("beforeChange", (event, slick, currentSlide, nextSlide) => {
      $carousel.find(".slick-slide").each((index, el) => {
        const $this = $(el),
          slickindex = $this.attr("data-slick-index");
        if (nextSlide == slick.slideCount - 1 && currentSlide == 0) {
          if (slickindex == "-1") {
            $this.addClass("is-active-next");
          } else {
            $this.removeClass("is-active-next");
          }
        } else if (nextSlide == 0) {
          if (slickindex == slick.slideCount) {
            $this.addClass("is-active-next");
          } else {
            $this.removeClass("is-active-next");
          }
        } else {
          $this.removeClass("is-active-next");
        }
      });
    });
    $carousel.slick({
      dots: true,
      arrows: false,
      infinite: true,
      loop: false,
      autoplay: true,
      autoplaySpeed: 3000,
      speed: 800,
      pauseOnFocus: false,
      pauseOnHover: false,
      pauseOnDotsHover: false,
      waitForAnimate: false,
      centerMode: true,
      centerPadding: '20%',
    });
  });

解説:

  • beforeChangeイベント: スライドが切り替わる直前に発火するイベントです。このイベントを利用して、スライドに対して動的にクラスを追加・削除します。
  • is-active-nextクラスの管理: 次にアクティブになるスライドにis-active-nextクラスを追加し、それ以外のスライドからは削除します。これにより、中央スライドの拡大を制御します。

意図と効果:

  • ループ時のガタつき解消: 通常、slickスライダーは無限ループを実現するためにクローンスライドを生成します。しかし、このクローンスライドが原因で2周目以降にスライダーがガタつくことがあります。is-active-nextクラスを動的に管理することで、中央スライドの拡大効果を正確に適用し、ガタつきを防止します。
  • スムーズなアニメーション: クラスの追加・削除を通じて、中央スライドのみを拡大表示し、他のスライドは縮小表示に保つことで、視覚的な一貫性とスムーズなアニメーションを実現します。

どなたでもコメントや質問をどうぞ

スパム対策のため、承認作業を行うまでは表示されません。ご了承ください。

CAPTCHA