diff --git a/workloads/ecommerce/components/product/product-gallery.tsx b/workloads/ecommerce/components/product/product-gallery.tsx index 92d059f..cf2e7f3 100644 --- a/workloads/ecommerce/components/product/product-gallery.tsx +++ b/workloads/ecommerce/components/product/product-gallery.tsx @@ -14,6 +14,16 @@ interface HoverZoomOrigin { x: number; y: number } // continua en touch, asi que en mobile simplemente no aparece el efecto, // sin romper nada). Independiente del zoom interactivo del modal // (click -> Dialog con scale/drag), que sigue igual. +// +// El overlay de hover usa background-image (no transform:scale sobre el +// ) a proposito: escalar la imagen ya recortada por +// object-cover nunca iba a revelar las partes recortadas (ej. la cabeza +// de una figura de accion en una foto vertical) -- el recorte pasa antes +// del zoom, en el propio render. Con background-size en un solo valor +// (ancho%, alto en "auto") se preserva el aspect ratio real de la foto +// completa, y background-position 0%-100% permite recorrer TODA la +// imagen con el cursor, no solo la porcion que object-cover dejaba +// visible en reposo. const HOVER_ZOOM_SCALE = 2.2; export function ProductGallery({ images, name }: { images: string[]; name: string }) { @@ -57,7 +67,7 @@ export function ProductGallery({ images, name }: { images: string[]; name: strin return (
- {images.map((image) => )} + {images.map((image) => )}
@@ -73,10 +83,17 @@ export function ProductGallery({ images, name }: { images: string[]; name: strin fill priority sizes="(max-width: 1024px) 100vw, 50vw" - className="object-cover transition-transform duration-150 ease-out" + className="object-cover" + /> +
Zoom interactivo