Blog

ブログ

Swiperでスライドが1枚のときクロスフェードさせない方法

前田 大地

Swiperを使って画像などをクロスフェードで切り替えようとしたとき、loopをtrueにしていると、スライドが1枚しかなくてもクロスフェードエフェクトが発生します。通常のフェードと違ってクロスフェードでは一瞬フワッとなるので、見た目もあまりよろしくないです。

例えばお客さんのほうで画像を登録するようなコンテンツだと、スライド数はこちらでコントロールできないので、何らかの対策が必要です。良さそうな方法がないか模索したのですが、スライドが1枚しかないときにclassを付与する方法が、汎用性も高く使いやすかったので紹介します。

STEP1. スライド数を判定して1枚のときclassを付与する

JavaScriptを使い、スライド数を数えて1つだけだったらclassを付与します。Swiperが初期化されると、スライドが複製されてしまうので、初期化前にスライド数を数えます。

// disable用のclassを付ける
const swiperClass = document.getElementsByClassName('swiper');
for (let i = 0; i < swiperClass.length; i++) {
  const count = swiperClass[i].getElementsByClassName('swiper-slide').length;
  if( count <= 1 ){
    swiperClass[i].classList.add("swiper-disabled");
  }
}

〜 この下にSwiper初期化のコード 〜

上記コードでは、Swiperコンテナごとにswiper-slideの数を数えて、1つ以下だったら「swiper-disabled」というclassを付与しています。とくにSwiperの動作に影響はありません。もちろん、ページ内に複数のSwiperがあっても大丈夫です。

Swiper 6以前を使っている場合、Swiperコンテナのclass名がswiperではなくswiper-containerになりますのでご注意ください。

STEP2. classが付与されたときフェードできなくする

で、swiper-disabledが付与されたSwiperに対してCSSで強制的にエフェクトできないようにすればOKです。

.swiper-disabled .swiper-slide  {
  opacity: 1 !important;
}

はい、できました。

そもそもスライドが1枚のときはSwiperを初期化しない。という手もありますが、まあ、こういうやり方もありますよ、と、いうことで。

Web Designer / Developer

前田 大地

沼津高専中退。デザイン会社、システム開発会社を経てセブンシックスを設立。マーケティング、デザイン、テクノロジーに精通するオールラウンダーとして、県内の中小企業に向けた戦略型ホームページ制作を開始。一方で、都内の広告代理店からの要請で大企業案件にも多数参加。企業が本当に必要とするホームページ制作とは何か、を日々探求している。

Blog top