【Splide】スライド数が足りないときループスライダーを無効にする
Web制作において、SplideはJavaScriptのスライダーライブラリの一つとして広く使われており、特にループ処理と組み合わせて使用する方も多いと思います。
しかし、ループ処理を用いる際に注意が必要なのが、スライダーの幅に対してスライドの数が不足している場合です。このような状況では、意図しない挙動を防ぐために、スライダー自体を無効にするのが適切です。
たとえば、コーポレートサイトの新着記事をカード形式でスライド表示させる場合、投稿件数が少ないとスライダーとして機能させる必要がないことがあります。
それどころか、以下のように1件の記事が複数回表示されてしまい、意図しないループが発生するケースもあります。
本記事では、スライダーの幅に対してスライドの数が不足しているときにSplideを無効化する方法を紹介します。
スライダーの過不足を制御する
overflowによる監視
Splideにはoverflowというオプションがあり、コンテンツの幅に対してスライドさせる要素が足りている場合はtrue、不足している場合はfalseになります。
こちらを利用して、isOverflowがtrueのときとfalseのときでスライダーの有効・無効を切り替えます。
まずは枠から。
var splide = new Splide();
splide.on( 'overflow', function ( isOverflow ) {
if ( isOverflow ) {
// 十分なスライドがあるときの処理(ループスライダー有効)
} else {
// スライドが不足しているときの処理(ループスライダー無効)
};
});
splide.mount();
これはsplideのoptionsを用いて、以下のように書き換えられます。
isOverflowはスライド不足のときfalseです。以下のようにすることで、矢印やページネーションを無効にできます。
var splide = new Splide();
splide.on( 'overflow', function ( isOverflow ) {
splide.options = {
arrows: isOverflow,
pagination: isOverflow,
drag: isOverflow,
};
});
splide.mount();
さらにループスライダーでは、スライダーの位置をgo()メソッドを用いてリセットする処理、clonesオプションを変更し、ダミーのスライドが作られないようにする処理を記述します。
var splide = new Splide( '.splide', {
type: 'loop'
});
splide.on( 'overflow', function ( isOverflow ) {
// スライダーの位置をリセット
splide.go( 0 );
splide.options = {
arrows: isOverflow,
pagination: isOverflow,
drag: isOverflow,
// クローンの破棄・再生成
clones: isOverflow ? undefined : 0
};
});
splide.mount();
スライド中央揃え
スライドの数が不足しているとき、コンテンツを中央揃えにする場合はCSSで調整します。
is-overflowクラスを利用します。
/* 中央揃え */
.splide:not( .is-overflow ) .splide__list {
justify-content: center;
}
/* gapオプション有効のときに最後のコンテンツのmarginを取り除く */
.splide:not( .is-overflow ) .splide__slide:last-child {
margin: 0 !important;
}
※JavaScriptでも中央揃えにすることはできます。
実際のコード
var splide = new Splide( '.splide', {
type: 'loop'
});
splide.on( 'overflow', function ( isOverflow ) {
splide.go( 0 );
splide.options = {
arrows: isOverflow,
pagination: isOverflow,
drag: isOverflow,
clones: isOverflow ? undefined : 0
};
});
splide.mount();
.splide:not( .is-overflow ) .splide__list {
justify-content: center;
}
.splide:not( .is-overflow ) .splide__slide:last-child {
margin: 0 !important;
}
最後まで読んでいただきありがとうございました。
参考
Splideは、本記事執筆時点の2025年5月23日時点で、バージョン4.1.3です。
Discussion