Advertisement
Miii7aka

Untitled

Aug 7th, 2024
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useState } from 'react';
  2. import { Link } from 'react-router-dom';
  3.  
  4. export default function Carousel({ slides }) {
  5.     const [currentIndex, setCurrentIndex] = useState(0);
  6.  
  7.     const goToPrevious = () => {
  8.         const isFirstSlide = currentIndex === 0;
  9.         const newIndex = isFirstSlide ? slides.length - 1 : currentIndex - 1;
  10.         setCurrentIndex(newIndex);
  11.     };
  12.  
  13.     const goToNext = () => {
  14.         const isLastSlide = currentIndex === slides.length - 3;
  15.         const newIndex = isLastSlide ? 0 : currentIndex + 1;
  16.         setCurrentIndex(newIndex);
  17.     };
  18.  
  19.     return (
  20.         <section className="relative bg-black py-8 px-4">
  21.             <div className="relative w-full h-64 overflow-hidden">
  22.                 {/* Carousel Wrapper */}
  23.                 <div
  24.                     className="relative flex transition-transform duration-500 ease-in-out"
  25.                     style={{ transform: `translateX(-${currentIndex * 100}%)` }}
  26.                 >
  27.                     {/* Carousel Items */}
  28.                     {slides.map((slide) => (
  29.                         <div
  30.                             key={slide._id}
  31.                             className="flex-none w-full md:w-1/3 h-64 px-4 py-2"
  32.                         >
  33.                             <Link to={`/stage/details/${slide._id}`}>
  34.                                 <div className="bg-white rounded-lg shadow-lg overflow-hidden h-full">
  35.                                     <img
  36.                                         src={slide.stageImageUrl}
  37.                                         className="w-full h-auto object-cover"
  38.                                         alt={slide.stageName}
  39.                                     />
  40.                                 </div>
  41.                             </Link>
  42.                         </div>
  43.                     ))}
  44.                 </div>
  45.                 {/* Navigation Controls */}
  46.                 <button
  47.                     onClick={goToPrevious}
  48.                     className="absolute top-1/2 left-4 transform -translate-y-1/2 bg-gray-800 text-white p-2 rounded-full"
  49.                 >
  50.                     <svg
  51.                         className="w-6 h-6"
  52.                         fill="none"
  53.                         stroke="currentColor"
  54.                         viewBox="0 0 24 24"
  55.                         xmlns="http://www.w3.org/2000/svg"
  56.                     >
  57.                         <path
  58.                             strokeLinecap="round"
  59.                             strokeLinejoin="round"
  60.                             strokeWidth={2}
  61.                             d="M15 19l-7-7 7-7"
  62.                         />
  63.                     </svg>
  64.                     <span className="sr-only">Previous</span>
  65.                 </button>
  66.                 <button
  67.                     onClick={goToNext}
  68.                     className="absolute top-1/2 right-4 transform -translate-y-1/2 bg-gray-800 text-white p-2 rounded-full"
  69.                 >
  70.                     <svg
  71.                         className="w-6 h-6"
  72.                         fill="none"
  73.                         stroke="currentColor"
  74.                         viewBox="0 0 24 24"
  75.                         xmlns="http://www.w3.org/2000/svg"
  76.                     >
  77.                         <path
  78.                             strokeLinecap="round"
  79.                             strokeLinejoin="round"
  80.                             strokeWidth={2}
  81.                             d="M9 5l7 7-7 7"
  82.                         />
  83.                     </svg>
  84.                     <span className="sr-only">Next</span>
  85.                 </button>
  86.             </div>
  87.             {/* Indicators */}
  88.             <div className="absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2">
  89.                 {slides.map((_, index) => (
  90.                     <button
  91.                         key={index}
  92.                         className={`w-3 h-3 rounded-full ${
  93.                             currentIndex === index ? 'bg-gray-800' : 'bg-gray-500'
  94.                         }`}
  95.                         onClick={() => setCurrentIndex(index)}
  96.                     />
  97.                 ))}
  98.             </div>
  99.         </section>
  100.     );
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement