Crear un carrusel de imágenes con efecto 3D usando React

Tiempo de lectura: 2 minutos

Hoy os traigo un tutorial paso a paso para crear el componente QuantumCarousel en React con animaciones 3D y transiciones suaves.

Paso 1: Configuración del Proyecto

Asegúrate de tener Node.js y npm instalados en tu máquina. Luego, crea un nuevo proyecto de React utilizando Create React App:

npx create-react-app quantum-carousel-tutorial
cd quantum-carousel-tutorial

Paso 2: Estructura del Proyecto

Organiza tu proyecto creando un componente QuantumCarousel y un archivo CSS QuantumCarousel.css para los estilos.

src/
|-- components/
|   |-- QuantumCarousel.js
|-- App.js
|-- App.css
|-- QuantumCarousel.css

Paso 3: Instalación de Dependencias

Instala las dependencias necesarias para las animaciones y transiciones:

npm install react-transition-group

Paso 4: Implementación del QuantumCarousel

Crea el componente QuantumCarousel.js en la carpeta components:

// components/QuantumCarousel.js
import React, { useState, useEffect } from 'react';
import './QuantumCarousel.css';

const QuantumCarousel = ({ images }) => {
  const [currentIndex, setCurrentIndex] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => {
      const nextIndex = (currentIndex + 1) % images.length;
      setCurrentIndex(nextIndex);
    }, 3000); // Cambia de imagen cada 3 segundos

    return () => clearInterval(interval);
  }, [currentIndex, images.length]);

  const handlePrev = () => {
    const prevIndex = (currentIndex - 1 + images.length) % images.length;
    setCurrentIndex(prevIndex);
  };

  const handleNext = () => {
    const nextIndex = (currentIndex + 1) % images.length;
    setCurrentIndex(nextIndex);
  };

  return (
    <div className="quantum-carousel">
      <div className="carousel-container">
        {images.map((image, index) => (
          <div
            key={index}
            className={`carousel-item ${index === currentIndex ? 'active' : ''}`}
            style={{ backgroundImage: `url(${image.src})` }}
          >
            <h2>{image.title}</h2>
          </div>
        ))}
      </div>
      <button className="carousel-button prev" onClick={handlePrev}>
        &#8249;
      </button>
      <button className="carousel-button next" onClick={handleNext}>
        &#8250;
      </button>
    </div>
  );
};

export default QuantumCarousel;

Paso 5: Estilos con CSS

Crea el archivo QuantumCarousel.css en la misma carpeta que tu componente:

/* components/QuantumCarousel.css */
.quantum-carousel {
  position: relative;
  width: 80%;
  margin: 20px auto;
  overflow: hidden;
}

.carousel-container {
  display: flex;
  transition: transform 0.5s ease-in-out;
}

.carousel-item {
  flex: 0 0 100%;
  height: 300px;
  background-size: cover;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 24px;
  transform: scale(1);
  opacity: 0.8;
  transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out;
}

.carousel-item h2 {
  margin: 0;
}

.carousel-item.active {
  transform: scale(1.2);
  opacity: 1;
  z-index: 1;
}

.carousel-button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  font-size: 24px;
  background: none;
  border: none;
  color: #fff;
  cursor: pointer;
  outline: none;
}

.carousel-button.prev {
  left: 10px;
}

.carousel-button.next {
  right: 10px;
}

Paso 6: Implementación en App.js

Utiliza el componente QuantumCarousel en tu App.js:

// App.js
import React from 'react';
import QuantumCarousel from './components/QuantumCarousel';

const App = () => {
  const images = [
    { src: 'image1.jpg', title: 'Imagen 1' },
    { src: 'image2.jpg', title: 'Imagen 2' },
    { src: 'image3.jpg', title: 'Imagen 3' },
    // Agrega más imágenes según sea necesario
  ];

  return (
    <div>
      <h1>¡Carrusel Cuántico Impresionante!</h1>
      <QuantumCarousel images={images} />
    </div>
  );
};

export default App;

Paso 7: Ejecutar la Aplicación

Finalmente, ejecuta tu aplicación con el siguiente comando:

npm start

Esto abrirá tu aplicación en el navegador.

Deja un comentario