Scroll Infinito en Aplicaciones Web: Implementación y Mejores Prácticas
Clase 11 de 20 • Curso de API REST con Javascript: Performance y Usabilidad
Resumen
¿Cómo cambiar el evento de clic por un evento de scroll?
Para mejorar la experiencia de usuario al cargar más contenido, como películas en tendencia, es eficaz utilizar el evento de scroll en lugar de un botón. Al implementar un Infinite Scroll, mejora la navegación al cargar contenido automáticamente cuando el usuario llega al final de la página. Vamos a explorar cómo lograrlo utilizando un truco sencillo para detectar cuándo los usuarios llegan al final del scroll.
¿Qué propiedades usar para calcular el scroll?
Para determinar cuándo el usuario llega al final de la página, es esencial conocer tres propiedades clave del DOM:
- scrollTop: Indica la cantidad de scroll que el usuario ha realizado hasta ahora.
- clientHeight: Muestra la altura visible del navegador o ventana del usuario.
- scrollHeight: Total del scroll que se puede realizar en la página.
Estas propiedades se combinan para saber si el usuario ha llegado al mismo lugar que el scroll total:
if (scrollTop + clientHeight >= scrollHeight - 15) {
// Código para cargar más contenido
}
La razón para restar 15 píxeles de scrollHeight
es para asegurar que se detecte correctamente una vez el usuario esté cercano al final, facilitando una carga más suave del contenido adicional.
¿Cómo implementar el Infinite Scroll en el código?
El procedimiento para lograr un Infinite Scroll comienza por escuchar el evento de scroll del objeto window
y definir cuándo ese scroll ha llegado al final.
const isScrollAtBottom = scrollTop + clientHeight >= scrollHeight - 15;
if (isScrollAtBottom) {
// Llamar función para cargar más contenido
}
Mejor manejo del evento con el uso de funciones dinámicas
- Creando una función dinámica: Para integrar el Infinite Scroll no solo en una página sino en varias, es útil crear una variable que determine la acción al llegar al final del scroll según la ruta en la que se encuentre el usuario:
let infiniteScroll;
function setInfiniteScroll(routeFunction) {
infiniteScroll = routeFunction;
}
- Asignar una función por ruta: Dependiendo de la página en la que se esté (películas en tendencia, categorías, etc.), se asigna una función distinta para el Infinite Scroll, como se muestra a continuación:
if (currentRoute === 'trending') {
setInfiniteScroll(getPaginatedTrendingMovies);
}
- Implementación del removing y adding del evento: Cada vez que se navegue entre rutas diferentes, es crucial remover los listeners para evitar redundancias o ejecuciones ineficientes del scroll, y luego añadir el nuevo listener apropiado:
if (infiniteScroll) {
window.removeEventListener('scroll', infiniteScroll);
infiniteScroll = undefined;
}
// Al cambiar de ruta:
setInfiniteScroll(newScrollFunction);
window.addEventListener('scroll', infiniteScroll, { passive: false });
¿Cómo funciona la implementación práctica?
Implementado esto, al llegar al fondo de la página, se ejecuta automáticamente el cargador de contenido, sin necesidad de botones, proporcionando una experiencia fluida y continua para el usuario. Te animamos a probar este enfoque e implementarlo en tus proyectos web. Con esta estructura flexible, estarás listo para añadir Infinite Scroll a más rutas y optimizar el rendimiento de tu aplicación.
Este enfoque no solo mejora la eficiencia, sino que también optimiza la experiencia de navegación del usuario en tus aplicaciones. ¡Atrévete a ponerlo en práctica y descubre cómo un scroll infinito puede mejorar tus aplicaciones web!