2021.02.11
【jQuery】slickの「Center Mode」で中央を大きくする等した際に、2周目にがたつく場合の対応方法
よく使用させていただいているスライダープラグイン「Slick」。
「Center Mode」で中央部分を大きくする、中央以外を透過する等した場合、2周目にがたつく場合の対応方法
const $slider = $("#js-slider");
// 左右の透過の2周目ががたつく対応
$slider.on("beforeChange", (event, slick, currentSlide, nextSlide) => {
$slider.find(".slick-slide").each((index, el) => {
const $this = $(el),
slickindex = $this.attr("data-slick-index");
if (nextSlide == slick.slideCount - 1 && currentSlide == 0) {
// 現在のスライドが最初のスライドでそこから最後のスライドに戻る場合
if (slickindex == "-1") {
// 最後のスライドに対してクラスを付与
$this.addClass("is-active-next");
} else {
// それ以外は削除
$this.removeClass("is-active-next");
}
} else if (nextSlide == 0) {
// 次のスライドが最初のスライドの場合
if (slickindex == slick.slideCount) {
// 最初のスライドに対してクラスを付与
$this.addClass("is-active-next");
} else {
// それ以外は削除
$this.removeClass("is-active-next");
}
} else {
// それ以外は削除
$this.removeClass("is-active-next");
}
});
});
// スライダー
$slider.slick({
centerMode: true
});
is-active-nextクラスに対してcss側でslick-currentクラスと同じ処理をする。
.slick-slide {
transition: all 0.3s ease;
transform: scale(0.8);
}
.slick-slide.slick-current ,
.slick-slide.is-active-next {
transform: scale(1);
}