Digamos que desea mover el background-position
en un elemento mientras pasa el mouse sobre él para darle un poco de dinamismo al diseño. Tienes un elemento como este:
<div class="module" id="module"></div>
Y le arrojas un fondo:
.module {
background-image: url(big-image.jpg);
}
Puede ajustar el background-position
en JavaScript así:
const el = document.querySelector("#module");
el.addEventListener("mousemove", (e) => {
el.style.backgroundPositionX = -e.offsetX + "px";
el.style.backgroundPositionY = -e.offsetY + "px";
});
Vea el Pen Move a background with mouse de Chris Coyier (@chriscoyier) en CodePen.
O bien, podría actualizar las propiedades personalizadas de CSS en JavaScript en su lugar:
const el = document.querySelector("#module");
el.addEventListener("mousemove", (e) => {
el.style.setProperty('--x', -e.offsetX + "px");
el.style.setProperty('--y', -e.offsetY + "px");
});
.module {
--x: 0px;
--y: 0px;
background-image: url(large-image.jpg);
background-position: var(--x) var(--y);
}
Vea el Pen Move a background with mouse de Chris Coyier (@chriscoyier) en CodePen.
Aquí hay un ejemplo que mueve el fondo directamente en JavaScript, pero con una transición aplicada para que se deslice a la nueva posición en lugar de moverse bruscamente la primera vez que ingresa:
Vea el anuncio de fondo móvil de pluma de Chris Coyier (@chriscoyier) en CodePen.
O bien, podría mover un elemento real en su lugar (en lugar del background-position
). Haría esto si hubiera algún tipo de contenido o interactividad en el elemento deslizante. Aquí hay un ejemplo de eso, que establece las propiedades personalizadas de CSS nuevamente, pero luego mueve el elemento a través de un CSS translate()
y un calc()
para moderar la velocidad.
Vea el anuncio de mapa de calor móvil Pen Hotjar de Chris Coyier (@chriscoyier) en CodePen.
Estoy seguro de que hay muchas otras formas de hacer esto: un viewBox SVG en movimiento, scripts que controlan un lienzo, webGL… ¡quién sabe! Si tiene algunas formas más sofisticadas de manejar esto, vincúlelas en los comentarios.