Componente web personalizado que permite aplicar efecto de zoom en imágenes mediante click o hover, con seguimiento del cursor para explorar detalles específicos de la imagen.
Haz click en la imagen para activar el zoom. Mueve el cursor para explorar diferentes partes de la imagen. Haz click fuera de la imagen o nuevamente en ella para desactivar el zoom.
<!-- Importar el componente -->
<script src="zoom-image-component/index.js"></script>
<link rel="stylesheet" href="zoom-image-component/index.css">
<!-- Implementación básica con click -->
<zoom-image-component data-zoom-mode="click" data-zoom-level="2">
<div data-zoom-image-wrapper>
<img src="ruta/a/imagen.jpg" alt="Descripción de la imagen">
</div>
</zoom-image-component>
<!-- data-zoom-mode: Establece cómo se activa el zoom (click/hover) -->
<!-- data-zoom-level: Nivel de ampliación al hacer zoom (2 = 200%) -->
Simplemente coloca el cursor sobre la imagen para activar el zoom. El zoom se desactivará automáticamente al mover el cursor fuera de la imagen.
<zoom-image-component
data-zoom-mode="hover"
data-zoom-level="1.5"
class="zoom-fancy">
<div data-zoom-image-wrapper>
<img src="ruta/a/imagen.jpg" alt="Descripción de la imagen">
</div>
</zoom-image-component>
.zoom-fancy [data-zoom-image-wrapper] {
--image-wrapper-border-radius: 8px;
--image-wrapper-border: none;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
}
$1,299.99
$899.99
$249.99
Esta galería muestra cómo implementar el zoom en imágenes de productos, ideal para tiendas online.
<div class="product-gallery">
<div class="product-card">
<zoom-image-component data-zoom-mode="click" data-zoom-level="2.5" class="zoom-square">
<div data-zoom-image-wrapper>
<img src="imagen.jpg" alt="Laptop">
</div>
</zoom-image-component>
<h4>Laptop Pro</h4>
<p>$1,299.99</p>
</div>
<!-- Más productos... -->
</div>
.product-gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
}
.zoom-square [data-zoom-image-wrapper] {
--image-wrapper-max-width: 250px;
--image-wrapper-aspect-ratio: 1/1;
}
/* Cursor personalizado */
.zoom-crosshair [data-zoom-image-wrapper] {
cursor: crosshair;
}
Estos ejemplos muestran cómo personalizar la apariencia del componente usando variables CSS y clases personalizadas.
/* Estilo redondeado */
.zoom-rounded [data-zoom-image-wrapper] {
--image-wrapper-border-radius: 12px;
--image-wrapper-border: 2px solid var(--component-primary);
}
/* Ajuste contain */
.zoom-contain [data-zoom-image-wrapper] {
--image-object-fit: contain;
--image-wrapper-border: 1px solid #e0e0e0;
background-color: white;
}
/* Variables CSS disponibles */
[data-zoom-image-wrapper] {
--image-wrapper-max-width: 300px;
--image-wrapper-aspect-ratio: 300/420;
--image-wrapper-border-radius: 0;
--image-wrapper-border: 1px solid;
--image-object-fit: cover;
}
<zoom-image-component data-zoom-mode="click" class="zoom-rounded">
<div data-zoom-image-wrapper>
<img src="imagen.jpg" alt="Descripción">
</div>
</zoom-image-component>
Este ejemplo desactiva automáticamente el zoom en pantallas menores a 768px de ancho, mejorando la experiencia en dispositivos móviles. Prueba a reducir el tamaño de tu ventana para ver cómo funciona.
<zoom-image-component
data-zoom-mode="click"
data-zoom-level="2"
data-disable-below="768">
<div data-zoom-image-wrapper>
<img src="imagen.jpg" alt="Descripción">
</div>
</zoom-image-component>
// El componente comprueba automáticamente el ancho de ventana
// y añade la clase zoom-disabled si es menor que el valor
// especificado en data-disable-below
// El atributo data-disable-below establece en qué punto
// se desactiva la funcionalidad de zoom (en píxeles)
// Cuando el zoom está desactivado, el cursor no cambia
// y los eventos de click/hover no tienen efecto