"use client"; import React, { useState, useEffect } from "react"; const ImageSlider = () => { const [currentImageIndex, setCurrentImageIndex] = useState(0); const [prevImageIndex, setPrevImageIndex] = useState(0); const images = [ "https://via.placeholder.com/300x200.png?text=Image+1", "https://via.placeholder.com/300x200.png?text=Image+2", "https://via.placeholder.com/300x200.png?text=Image+3", "https://via.placeholder.com/300x200.png?text=Image+4", ]; useEffect(() => { const intervalId = setInterval(() => { setPrevImageIndex(currentImageIndex); setCurrentImageIndex((prevIndex) => (prevIndex + 1) % images.length); }, 3000); // Change image every 3 seconds return () => clearInterval(intervalId); }, [currentImageIndex, images.length]); return ( <div className="bg-base-100 relative max-h-[28rem] overflow-hidden rounded-t-[3.5rem] border-l-[12px] border-r-[12px] border-t-[12px] border-black/75 md:order-first md:aspect-[9/18] md:max-h-none md:max-w-[24rem] lg:rounded-[4rem] lg:border-[14px]"> {images.map((image, index) => ( <img key={index} alt={`Slide ${index + 1}`} fetchpriority={index === 0 ? "high" : "low"} className={`absolute inset-0 h-full w-full rounded-t-3xl transition-all duration-1000 ease-in-out lg:rounded-3xl ${ index === currentImageIndex ? "translate-x-0 opacity-100" : index === prevImageIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0" }`} src={image} /> ))} </div> ); }; export default ImageSlider;
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter