見出し画像

【jQuery】slickのcenterModeで2周目の先頭のコンテンツがカクつく

バンドやミュージシャンのホームページ用WordPressテーマ「zousanrecords」を制作しております太田ヒロシです。

最近、zousanrecordsのトップページで、YouTube動画をスライド式にして見れるようにしました。
真ん中にメインの動画があって、両端の動画は半透明で少し見切れている、というものです。jQueryの「slick」というライブラリで、centerModeというので実装しています。サンプルページ↓

スライドさせて真ん中にくると、ふわっと透明じゃなくなるのですが、2周目、3周目になると、先頭の動画が「ふわっと」じゃなくて「パッと」変わることに気づきました。

どうも先頭の動画にcssのtransitionが効いていないよう。
試しに両端の動画は小さくして、真ん中にきたときに、ふわっと大きくなるようにしてみたのですが、やはりこれも同じように2周目の先頭の動画はカクついてしまいます。

調べてみると以下の記事にたどり着きました。

まんま、この事象でした。ありがたい。

こちらの記事を参考に、動画部分に適用しているjsファイルに以下を追記。

// slick 2週目のカクつき対応
const $slider = $(".js-slider");

$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");
		}
	});
});

htmlのスライダー部分にクラス「js-slider」を付与。

<ul class="video_slider js-slider">

cssで「is-active-next」に「slick-current」と同じ処理を。

ul.video_slider li.slick-current,
ul.video_slider li.is-active-next {
	opacity: 1;
	transition: .4s;
}

これで思うように動いてくれました!

zousanrecordsではミュージシャンのホームページ制作をお手伝いしています。無料版もあります。

追記

上記で解決したと思ったのですが、IEで見ると完全にデザインが崩れてしまいました。
IEはある程度捨ててるのですが、あまりにひどかったので、、一旦元に戻しました。

この記事が気に入ったらサポートをしてみませんか?