プログラミング

【PR】を含みます。

【swiper.js】一定速度で流れ続けるスライドショーをホバー時に一時停止する方法

swiper.js 一定速度で流れ続けるスライドショーをホバー時に一時停止する方法

「swiper.js」で一定速度で流れ続けるスライドショーをホバー時に一時停止する方法をメモとして残しておきます。
既存オプションのpauseOnMouseEnter: trueでも一時停止することができますが、停止するまでにタイムラグが発生します。
そのため、今回はホバー時に即時停止するようJavaScriptをカスタマイズしました。

POINT
  • 「swiper.js」のバージョンについて
    v8のCDNを使用
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css">
    <script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
    ※v9以降の「swiper.js」では、ロジック変更が入っているため上手く動作しません。

    最新のCDNバージョンは下記公式サイトでご確認いただけます。
    https://swiperjs.com/get-started#use-swiper-from-cdn

デモ

スライダーの上にマウスカーソルを乗せるとスライドショーが一時停止します。

スライド 1
スライド 2
スライド 3
スライド 4
スライド 5

コピペ用コード

下記HTML・CSS・JavaSctiptをコピペすることで、一定速度で流れ続けるスライドショーをホバー時に一時停止させることができます。

「swiper.js」の使用には、事前に「swiper.js」ファイルの読み込みが必要です。
下記はCDNで読み込んでいます。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css">
<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>

HTML
Copy
  1. <div class="swiper">
  2.   <div class="swiper-wrapper">
  3.     <div class="swiper-slide">スライド 1</div>
  4.     <div class="swiper-slide">スライド 2</div>
  5.     <div class="swiper-slide">スライド 3</div>
  6.     <div class="swiper-slide">スライド 4</div>
  7.     <div class="swiper-slide">スライド 5</div>
  8.   </div>
  9. </div>
CSS
Copy
  1. .swiper-wrapper {
  2.   transition-timing-function: linear;
  3. }
  4. .swiper-slide {
  5.   width: 200px;
  6.   height: 150px;
  7.   display: flex;
  8.   justify-content: center;
  9.   align-items: center;
  10. }
  11. .swiper-slide:nth-child(5n + 1) {
  12.   background-color: #CCFFB2;
  13. }
  14. .swiper-slide:nth-child(5n + 2) {
  15.   background-color: #B2FFF4;
  16. }
  17. .swiper-slide:nth-child(5n + 3) {
  18.   background-color: #B7B2FF;
  19. }
  20. .swiper-slide:nth-child(5n + 4) {
  21.   background-color: #FFB2EA;
  22. }
  23. .swiper-slide:nth-child(5n + 5) {
  24.   background-color: #FFD6B2;
  25. }
JavaSctipt
Copy
  1. (function() {
  2.   let speed = 5000;
  3.   const mySwiper = new Swiper('.swiper', {
  4.     loop: true,
  5.     slidesPerView: 'auto',
  6.     speed: speed,
  7.     spaceBetween: 10,
  8.     allowTouchMove: false,
  9.     autoplay: {
  10.       delay: 0,
  11.       disableOnInteraction: false,
  12.     },
  13.   });
  14.   let getTranslate;
  15.   document.querySelectorAll('.swiper').forEach(function(e){
  16.     e.addEventListener('mouseover', function () {
  17.       getTranslate = mySwiper.getTranslate();
  18.       mySwiper.setTranslate(getTranslate);
  19.       mySwiper.setTransition(0);
  20.     });
  21.     e.addEventListener('mouseout', function () {
  22.       getTranslate = mySwiper.getTranslate();
  23.       let getSlideWidthMgLeft = document.querySelector('.swiper-slide-active').style.marginLeft;
  24.       if (getSlideWidthMgLeft) {
  25.         getSlideWidthMgLeft = parseFloat(getSlideWidthMgLeft);
  26.       } else {
  27.         getSlideWidthMgLeft = 0;
  28.       }
  29.       let getSlideWidthMgRight = document.querySelector('.swiper-slide-active').style.marginRight;
  30.       if (getSlideWidthMgRight) {
  31.         getSlideWidthMgRight = parseFloat(getSlideWidthMgRight);
  32.       } else {
  33.         getSlideWidthMgRight = 0;
  34.       }
  35.       let getSlideWidth = document.querySelector('.swiper-slide-active').offsetWidth;
  36.       let getTotalSlideWidth = getSlideWidthMgLeft + getSlideWidthMgRight + getSlideWidth;
  37.       let diff = - getTotalSlideWidth - (getTranslate % getTotalSlideWidth);
  38.       let diffTime = diff / -getSlideWidth;
  39.       mySwiper.setTranslate(getTranslate + diff);
  40.       mySwiper.setTransition(speed * diffTime);
  41.     });
  42.   });
  43. })();

使用方法 Q&A

上手く動かないときに確認することは?

1.「swiper.js」のバージョンがv9以降でないことを確認してください。

本記事ではバージョン「v8」を使用しております。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css">

<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>


2.スライドの数が足りているか確認してください。

足りない場合はスライドを追加してください。(ループ可能なスライド枚数が必要です。)

また、CSSでスライドの幅を調整、「swiper.js」のオプションで1画面に表示する枚数を調整する等でも対応可能です。

HTMLとCSSの知識がありJavaScriptを学びたいという方におすすめの1冊

アイコン画像

もみじ

HTMLとCSSの知識がありJavaScriptを学びたいという方に入門書としておすすめの書籍です。

実務で役立つサンプルを手を動かしながら学ぶことができ、実践的なスキルを身に付けることができます。

JavaScriptのフロントエンドエンジニアを目指している方におすすめの1冊

アイコン画像

もみじ

この本はJavaScript初心者からフロントエンドエンジニアを目指す方にぴったりの1冊です。

非同期処理やAJAXなど、現代の開発で必要なスキルがわかりやすく解説されており、実務で役立つスキルを学ぶことができます。

-プログラミング
-, ,