サイトでスワイパースライダーを使用していて、スライドが1つしかない場合は、それを無効にしたいのですが。
現在、スライドが1つしかない場合は、ページ付けが表示され、クリックまたはスワイプできます。理想的には、スライドが1つしかない場合は何も操作しないでください。
私の現在のjsは:
var swiper = new Swiper('.swiper-container', {
// Optional parameters
direction: 'horizontal',
loop: false,
//autoplay: 6500,
autoplayDisableOnInteraction: false,
keyboardControl: true,
mousewheelControl: true,
pagination: '.swiper-pagination',
paginationClickable: true,
});
私もそうする方法を探していましたが、スワイプを無効にしてポケットベルを非表示にする「公式の」方法が見つからなかったので、少し即興することにしました。
したがって、スクリプトで、これをSwiper変数の後に追加できます。
JS:
if($(".slider .slide").length == 1) {
$('.swiper-wrapper').addClass( "disabled" );
$('.swiper-pagination').addClass( "disabled" );
}
これにより、スライダーにスライドが1つしかない場合は、クラスdisabled
がラッパーとページネーションに追加されます。これで、CSSを追加してSwiper効果をバイパスできます。
CSS:
.swiper-wrapper.disabled {
transform: translate3d(0px, 0, 0) !important;
}
.swiper-pagination.disabled {
display: none;
}
これは、ループがfalseに設定されている場合にのみ機能することに注意してください(あなたの場合のように)。ループがアクティブな場合、Swiperは、唯一のスライドの前後にスライドの複製を追加し、合計3つの同一のスライドを作成します。その後、length == 1
からlength == 3
。
これが役立つことを願っています!
Swiper APIには便利なオプションがあります。
watchOverflow (boolean|false)
// When enabled Swiper will be disabled and hide navigation buttons on case there are not enough slides for sliding
オプションの1つは、以下のように条件付きでオプションを追加することです。
let options = {};
if ( $(".swiper-container .swiper-slide").length == 1 ) {
options = {
direction: 'horizontal',
loop: false,
autoplayDisableOnInteraction: false,
keyboardControl: true,
mousewheelControl: true,
pagination: '.swiper-pagination',
paginationClickable: true,
}
} else {
options = {
loop: false,
autoplay: false,
}
}
var swiper = new Swiper('.swiper-container', options);
条件を追加するだけです:
if ($('.swiper-container .swiper-slide').length > 1) {
var swiper = new Swiper('.swiper-container', {
// Optional parameters
direction: 'horizontal',
loop: false,
//autoplay: 6500,
autoplayDisableOnInteraction: false,
keyboardControl: true,
mousewheelControl: true,
pagination: '.swiper-pagination',
paginationClickable: true,
});
}
取得したスライドの数を確認してください。
const numberOfSlides = document.querySelectorAll('.swiper-slide').length;
次に、スライドが1つだけの場合は、allowSlidePrev/allowSlideNext(または禁止するもの)をfalseに設定します。
const slider = new Swiper('.swiper-container', {
allowSlidePrev:numberOfSlides === 1 ? false:true,
allowSlideNext:numberOfSlides === 1 ? false:true
});
また、スライドのコレクションにアクセスできるので、イベントでこれらのアイテムのオン/オフを切り替えることもできます。たとえば、初期化:
on: {
init: function () {
const numberOfSlides = this.slides.length;
...
}
}
私はこのような新しいオプションで更新スワイパー機能を使用することを提案します:
params.loop = false;
params.pagination = null;
swiper.update();
Paramsは、スワイパーの初期化で使用されたオブジェクトです。
ありがとう!
$ ionicSlidesをうまく使用すると、配列の長さを確認できます。1つ以下の場合は、Swiperインスタンスを取得してこれらの関数を呼び出します。
$scope.$on("$ionicSlides.sliderInitialized", function (event, data) {
$scope.slider2 = data.slider;
$scope.slider2.activeIndex = 0;
if (vm.slidetext && vm.slidetext.length <= 1) {
$scope.slider2.destroyLoop();
$scope.slider2.stopAutoplay();
$scope.slider2.lockSwipes();
}
}
ただし、これらの関数はネイティブのSwiper用であるため、正常に機能するはずです。