import React, { useRef, useState, useEffect } from 'react'; import Autoplay from "embla-carousel-autoplay"; import { Carousel, CarouselContent, CarouselItem, type CarouselApi } from "@repo/ui/components/carousel"; interface CarouselComponentProps { carouselData: { id: number; image: string; title: string }[]; } const CarouselComponent: React.FC = ({ carouselData }) => { const [carouselAPI, setCarouselAPI] = useState(null); const [currentIndex, setCurrentIndex] = useState(0); const plugin = useRef(Autoplay({ delay: 2000, stopOnInteraction: true })); // 监听轮播图变化 useEffect(() => { if (!carouselAPI) return; const updateCurrentIndex = () => { setCurrentIndex(carouselAPI.selectedScrollSnap()); }; carouselAPI.on("select", updateCurrentIndex); return () => { carouselAPI.off("select", updateCurrentIndex); }; }, [carouselAPI]); // 滚动到指定索引 const scrollToIndex = (index: number) => { if (carouselAPI) { carouselAPI.scrollTo(index); setCurrentIndex(index); } }; return (
{/* 添加相对定位 */} {carouselData.map((item) => (
{item.title}
))}
{/* 圆点指示器 */}
{/* 添加绝对定位 */} {carouselData.map((_, index) => (
); }; export default CarouselComponent;