¿Cómo crear una animación de scroll con JavaScript?

| Última modificación: 3 de abril de 2025 | Tiempo de Lectura: 4 minutos

Hoy, vamos a hablar de cómo crear una animación de scroll para tu sitio web, usando únicamente HTML, CSS y JavaScript. Vamos a desglosar cada paso, entender los problemas que pueden surgir y cómo solucionarlos para lograr una experiencia de usuario fluida. Si quieres ser un desarrollador web experto o mejorar tus desarrollos web, te recomiendo no perderte este artículo.

¿Qué es una animación de scroll?

Una animación de scroll es un efecto visual que cambia a medida que el usuario desplaza la página hacia abajo o hacia arriba. Este tipo de animación es muy popular en sitios web modernos, donde el contenido se desplaza suavemente o cambia de forma conforme el usuario interactúa con la página.

En este artículo, exploraremos cómo implementar una animación de scroll que sea fluida, sin usar librerías externas, solo con las tecnologías fundamentales: HTML, CSS y JavaScript. Además, discutiremos cómo optimizar la animación para que funcione correctamente en dispositivos de diferentes capacidades.

animación de scroll con javascript


Creando una animación de scroll con JavaScript paso a pso

Paso 1: Preparación de la estructura HTML

Lo primero que necesitamos es la estructura básica de HTML. Vamos a crear una página simple que contenga un área de scroll y una animación visual, como una moto deslizándose sobre la pantalla:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Animación de Scroll</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="scroll-container">
<div class="animation" id="animation"></div>
</div>
<script src="script.js"></script>
</body>
</html>

Paso 2: Diseño con CSS

Ahora, añadimos el estilo básico para el contenedor y la animación. Vamos a usar position: fixed para que el objeto se quede fijo en su lugar mientras el usuario hace scroll.

body, html {
margin: 0;
padding: 0;
height: 100%;
}

.scroll-container {
position: relative;
height: 2000px; /* Aumenta la altura para habilitar el scroll */
background-color: #f0f0f0;
}

.animation {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
height: 200px;
background-color: red;
border-radius: 50%;
}

Paso 3: Agregando la Animación con JavaScript

Ahora que tenemos la estructura básica, vamos a crear la animación utilizando JavaScript. Queremos que la moto se desplace de arriba hacia abajo conforme el usuario hace scroll.

document.addEventListener('scroll', function() {
const scrollPosition = window.scrollY; // Obtiene la posición de scroll
const animationElement = document.getElementById('animation');

// Ajusta la animación de la moto basada en la posición de scroll
animationElement.style.transform = `translate(-50%, -50%) translateY(${scrollPosition}px)`;
});

¿Por qué no usar position: fixed?

El uso de position: fixed en nuestra animación puede ser útil, pero tiene algunas limitaciones, como cuando se cambia el tamaño de la ventana o cuando la animación no se ve tan fluida en dispositivos móviles. Afortunadamente, podemos ajustar la animación con CSS para mejorar la experiencia en diferentes tamaños de pantalla.

Paso 4: Optimización para el Rendimiento

A medida que agregamos más frames o imágenes a la animación, el rendimiento puede verse afectado, especialmente en dispositivos con hardware limitado. Una manera de optimizar el rendimiento es usar imágenes más livianas, como las imágenes en formato WebP, o incluso crear una animación con sprites en lugar de utilizar un video.

Si se utiliza un video como base, hay que tener cuidado con el tiempo de ejecución del currentTime, ya que no todas las fracciones de tiempo pueden ser actualizadas de manera precisa debido a las limitaciones de los navegadores por razones de seguridad y rendimiento. Para evitar este tipo de problemas, podemos optar por utilizar imágenes pre-cargadas o incluso crear nuestra propia animación con canvas para lograr un control más preciso sobre los fotogramas.

Paso 5: Mejorando la Fluidez con Preloading

Para evitar que la animación se “congele” mientras las imágenes o frames se cargan, podemos utilizar el preloading de imágenes para cargar todos los frames antes de que la animación comience. Aquí es donde un enfoque usando el objeto Image de JavaScript o la carga de imágenes en formato WebP puede ser muy útil.

function preloadImages(imageArray) {
imageArray.forEach((src) => {
const img = new Image();
img.src = src;
});
}

Paso 6: Implementación Final

Al aplicar todos estos pasos y optimizaciones, podrás crear una animación de scroll fluida que se vea bien en diferentes dispositivos y que sea eficiente en términos de rendimiento. A continuación, te proporciono una versión mejorada del código, que incluye todo lo necesario para lograr una animación exitosa.

document.addEventListener('scroll', function() {
const scrollPosition = window.scrollY;
const maxScroll = document.documentElement.scrollHeight - window.innerHeight;
const scrollFraction = scrollPosition / maxScroll;

const currentFrame = Math.floor(scrollFraction * totalFrames); // totalFrames sería el número total de frames disponibles

updateImage(currentFrame);
});

function updateImage(frameIndex) {
const image = document.getElementById('animation');
const frameSrc = `path_to_images/frame${String(frameIndex).padStart(3, '0')}.webp`;
image.src = frameSrc;
}

Más allá de las animaciones de scroll con JavaScript

Crear animaciones de scroll efectivas y optimizadas es una habilidad valiosa para cualquier desarrollador web. A lo largo de este artículo, hemos cubierto los conceptos básicos y algunas estrategias avanzadas para mejorar el rendimiento y fluidez de la animación. Con HTML, CSS y JavaScript, puedes crear animaciones interactivas impresionantes sin depender de librerías pesadas.

No olvides considerar el rendimiento y la accesibilidad al implementar estas animaciones para garantizar que tu sitio web sea rápido y accesible para todos los usuarios.

¿Te gustaría aprender más sobre animaciones web o mejorar tus habilidades de JavaScript? Únete a nuestro Bootcamp Full Stack Desarrollo Web y lleva tus habilidades al siguiente nivel.

¡CONVOCATORIA ABIERTA!

Desarrollo web

Full Stack Bootcamp

Clases en Directo | Acceso a +600 empresas | 98,49% empleabilidad