プログラミング

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

使用方法 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など、現代の開発で必要なスキルがわかりやすく解説されており、実務で役立つスキルを学ぶことができます。

-プログラミング
-, ,