1️⃣
AutoPlay 設定の EmblaCarousel で現在のインデックスを算出する
インデックスの算出方法
embla
は UI に対してかなり薄くしか影響しないので、
自分で現在のインデックスを取る必要がある。
AutoPlay
としていると、マウスイベントも発生しないので useEffect
でインデックスを更新する関数を用意してあげる。
下記はその例(もろもろ抜粋)。
import useEmblaCarousel from "embla-carousel-react";
import Autoplay from "embla-carousel-autoplay";
import { useEffect, useState } from "react";
...
const [emblaRef, emblaApi] = useEmblaCarousel(
{ loop: true, align: "center" },
[
Autoplay({
delay: 10_000,
}),
],
);
const [selectedIndex, setSelectedIndex] = useState<number>(0);
// current index 更新
useEffect(() => {
if (!emblaApi) return;
const onSelect = () => {
const index = emblaApi.selectedScrollSnap();
setSelectedIndex(index);
};
emblaApi.on("select", onSelect);
return () => {
emblaApi.off("select", onSelect);
};
}, [emblaApi]);
...
ドキュメント類
公式ドキュメント
こちらのディスカッションにある実装例も参考になった。
Discussion