0 0
Read Time:4 Minute, 49 Second

¿Alguna vez has querido agregar un carrusel de imágenes a tu sitio web que no solo se vea moderno, sino que también tenga una transición suave y visualmente atractiva? Hoy te mostraré cómo crear un carrusel de imágenes interactivo con HTML, CSS, y JavaScript, donde las imágenes se desplazan con una animación elegante desde el lado derecho, y el texto junto con un botón aparece sobre la imagen con un bonito efecto.

Características del Carrusel:

  • Transición de las imágenes desde el lado derecho con un efecto suave.
  • Miniaturas clicables que permiten cambiar entre las imágenes.
  • Texto animado y botón interactivo que aparecen después de que la imagen se despliega.
  • Filtro de oscurecimiento que mejora la legibilidad del texto al aparecer sobre la imagen.

Código Completo

Aquí tienes el código completo que puedes copiar y pegar en tu proyecto.

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Travel Slider</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <div class="main-image">
            <img src="https://tutorialazo.com/wp-content/uploads/2024/10/Switzerland.png" alt="Main Image" id="mainImg">
            <div class="image-info">
                <h2 id="imageTitle">Switzerland</h2>
                <p id="imageDescription">A beautiful country with stunning landscapes.</p>
                <button id="actionButton">Learn More</button>
            </div>
        </div>

        <div class="overlay-images">
            <div class="item previous">
                <img src="https://tutorialazo.com/wp-content/uploads/2024/10/Finland.png" alt="Overlay Image">
            </div>
            <div class="item next">
                <img src="https://tutorialazo.com/wp-content/uploads/2024/10/Mountain.png" alt="Overlay Image">
            </div>
        </div>

    </div>
    <script src="script.js"></script>
</body>
</html>

CSS:

body {
    font-family: Arial, sans-serif;
    background-color: #333;
    color: #fff;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.container {
    position: relative;
    width: 80%;
    max-width: 1000px;
    height: auto;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
}

.main-image {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

.main-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 10px;
    transform: translateX(100%); /* Imagen empieza fuera del contenedor */
    transition: transform 1.2s ease-in-out, filter 0.5s ease; /* Animación más suave con ease-in-out y filtro */
}

.main-image img.active {
    transform: translateX(0); /* Se desplaza a su posición original */
    filter: brightness(50%); /* Oscurecer la imagen cuando el texto esté visible */
}

.image-info {
    position: absolute;
    top: 50%;
    left: 10%;
    transform: translateY(-50%);
    opacity: 0; /* Inicialmente invisible */
    transition: opacity 1s ease-in-out 0.3s; /* Aparece después de la imagen */
}

.image-info h2, .image-info p, .image-info button {
    margin: 10px 0;
}

.image-info h2 {
    font-size: 24px;
    color: #FF7F50;
}

.image-info p {
    font-size: 16px;
    color: #f0f0f0;
}

.image-info button {
    padding: 10px 20px;
    background-color: #FF7F50;
    border: none;
    color: #fff;
    border-radius: 5px;
    cursor: pointer;
}

.image-info button:hover {
    background-color: #ff9b72;
}

/* Mostrar el contenedor de la información cuando la imagen está activa */
.main-image img.active + .image-info {
    opacity: 1;
}

.overlay-images {
    position: absolute;
    top: 50%;
    right: 5%;
    display: flex;
    flex-direction: row;
    transform: translateY(-50%);
}

.overlay-images .item {
    width: 120px;
    height: 200px; /* Alto de las miniaturas */
    margin: 10px 5px;
    opacity: 0.8;
    transition: transform 0.5s ease, opacity 0.5s ease;
}

.overlay-images .item img {
    width: 100%;
    height: 100%; /* Asegura que las imágenes ocupen todo el contenedor de 200px */
    border-radius: 10px;
    object-fit: cover;
}

.overlay-images .item:hover {
    transform: scale(1.1);
    opacity: 1;
}

JavaScript:

const mainImage = document.getElementById('mainImg');
const overlayItems = document.querySelectorAll('.overlay-images .item');
const imageTitle = document.getElementById('imageTitle');
const imageDescription = document.getElementById('imageDescription');

let images = [
    {
        src: "https://tutorialazo.com/wp-content/uploads/2024/10/Switzerland.png",
        title: "Switzerland",
        description: "A beautiful country with stunning landscapes."
    },
    {
        src: "https://tutorialazo.com/wp-content/uploads/2024/10/Finland.png",
        title: "Finland",
        description: "A land of forests, lakes and northern lights."
    },
    {
        src: "https://tutorialazo.com/wp-content/uploads/2024/10/Mountain.png",
        title: "Mountain",
        description: "Explore the majestic mountains with scenic views."
    }
];

let counter = 0;

// Función para actualizar la imagen principal y el contenido de la info
function updateMainImage() {
    mainImage.classList.remove('active'); // Quitar la clase activa antes del cambio
    setTimeout(() => {
        mainImage.src = images[counter].src; // Cambiar la imagen después de quitar la clase
        imageTitle.textContent = images[counter].title; // Actualizar el título
        imageDescription.textContent = images[counter].description; // Actualizar la descripción
        mainImage.classList.add('active'); // Volver a añadir la clase para el efecto
    }, 100); // Añadir un pequeño retraso para asegurar la transición
}

// Función para actualizar las miniaturas
function updateOverlayImages() {
    overlayItems.forEach((item, index) => {
        let overlayIndex = (counter + index + 1) % images.length;
        item.querySelector('img').src = images[overlayIndex].src;

        // Añadir el evento de clic a cada miniatura
        item.addEventListener('click', () => {
            counter = overlayIndex; // Cambia el índice principal al índice de la miniatura clicada
            updateMainImage(); // Actualiza la imagen principal con el efecto
            updateOverlayImages(); // Vuelve a actualizar las miniaturas para reflejar el nuevo estado
        });
    });
}

// Inicializar la imagen principal y las miniaturas
updateMainImage();
updateOverlayImages();

Cómo Funciona este Código:

  • Transiciones suaves: La imagen principal se desplaza desde el lado derecho con un efecto suave, y luego aparece un filtro oscuro para hacer más legible el texto sobre la imagen.
  • Miniaturas interactivas: Las miniaturas son clicables, lo que te permite navegar fácilmente entre las imágenes del carrusel.
  • Texto dinámico y botón: El título, la descripción y el botón se actualizan dinámicamente en función de la imagen seleccionada.

Personalización:

Puedes personalizar fácilmente este carrusel cambiando las imágenes, los textos, los estilos de los botones, o incluso el comportamiento de la animación. Además, puedes agregar más imágenes o reducir el número de miniaturas según tus necesidades.

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %
Previous post Página de Verificación OTP con HTML, CSS y JavaScript
Next post Marketing digital y GDPR (Protección de datos)

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Cerrar