news/app/components/AutoCarousel.tsx

73 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-11-18 19:45:46 +08:00
import * as React from "react";
import Autoplay from "embla-carousel-autoplay";
2025-11-19 17:03:34 +08:00
import { Card, CardContent } from "@/ui/card";
2025-11-18 19:45:46 +08:00
import {
Carousel,
CarouselContent,
CarouselItem,
2025-11-20 08:00:40 +08:00
} from "@/ui/carousel";
2025-11-18 19:45:46 +08:00
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",
2025-11-19 16:30:50 +08:00
"/images/book1.png",
"/images/header.png",
"/images/jcdt.png",
2025-11-18 19:45:46 +08:00
];
export function AutoCarouselDemo() {
return (
2025-11-20 08:00:40 +08:00
<div className="relative w-full mx-auto mt-30 mb-20">
2025-11-19 17:03:34 +08:00
2025-11-18 19:45:46 +08:00
<Carousel
2025-11-19 17:03:34 +08:00
opts={{
loop: true,
align: "start",
}}
2025-11-18 19:45:46 +08:00
plugins={[
2025-11-19 17:03:34 +08:00
Autoplay({
delay: 3000,
stopOnInteraction: false,
}),
2025-11-18 19:45:46 +08:00
]}
className="w-full"
>
2025-11-19 17:03:34 +08:00
<CarouselContent className="flex gap-4">
{imageUrls.map((src, index) => (
<CarouselItem
key={index}
className="basis-1/4 md:basis-1/3 lg:basis-1/4 flex-shrink-0 relative"
>
<div
className="p-1 transition-transform duration-500 hover:scale-105 cursor-pointer"
style={{
transform: 'scale(1)',
transition: 'all 0.5s ease',
}}
2025-11-18 19:45:46 +08:00
>
2025-11-20 08:00:40 +08:00
<div className="overflow-hidden border-none h-120">
2025-11-19 17:03:34 +08:00
<CardContent className="relative w-full h-full">
<img
src={src}
alt={`Slide ${index + 1}`}
className="w-full h-full object-cover"
loading="lazy"
/>
</CardContent>
2025-11-19 16:30:50 +08:00
</div>
2025-11-19 17:03:34 +08:00
</div>
</CarouselItem>
))}
2025-11-18 19:45:46 +08:00
</CarouselContent>
2025-11-19 17:03:34 +08:00
2025-11-18 19:45:46 +08:00
</Carousel>
</div>
);
}