import * as React from "react"; import Autoplay from "embla-carousel-autoplay"; import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi, } from "@/ui/carousel"; const imageUrls = [ "/images/carousel-1.jpg", "/images/carousel-2.jpg", "/images/carousel-3.jpg", "/images/carousel-4.jpg", "/images/carousel-5.jpg", "/images/carousel-6.jpg", "/images/carousel-7.jpg", "/images/carousel-8.jpg", "/images/carousel-9.jpg", "/images/book1.png", "/images/header.png", "/images/jcdt.png", ]; export function AutoCarouselDemo() { const [api, setApi] = React.useState(); const [current, setCurrent] = React.useState(0); const totalSlides = imageUrls.length; React.useEffect(() => { if (!api) return; setCurrent(api.selectedScrollSnap()); api.on("select", () => { setCurrent(api.selectedScrollSnap()); }); }, [api]); const getScaleByDistance = (index: number, current: number, total: number): number => { const directDist = Math.abs(index - current); const wrapDist = total - directDist; const minDist = Math.min(directDist, wrapDist); return Math.max(0.5, 1.4 - minDist * 0.15); }; return ( // 最外层:允许内容溢出(关键!)
{/* 内容区域也要 visible */} {imageUrls.map((src, index) => { const scale = getScaleByDistance(index, current, totalSlides); const isCurrent = scale > 1.2; return ( {/* 这个 div 是真正要缩放的整体卡片 */}
{`Slide
); })}
); }