Timeline + scrub + pin
El patrón más potente: una timeline GSAP controlada por scroll con el elemento padre fijado. Todas las animaciones dentro de la timeline se sincronizan con el scroll.
pin: true fija el trigger; scrub: 1 suaviza.
Implementación completa de GSAP ScrollTrigger: triggers, scrub, pin, batch y scroll horizontal. La guía de referencia para Cultiva Digital Studio.
Cada técnica cubre un caso de uso distinto. Combínalas para crear experiencias de scroll inmersivas y fluidas.
Vincula una animación GSAP al scroll. Define cuándo empieza y termina con start / end y controla el comportamiento con toggleActions.
Vincula el progreso de la animación directamente a la posición del scroll. Con scrub: 1 añade suavizado. Ideal para efectos parallax y transiciones cinematográficas.
Fija un elemento en pantalla mientras el usuario sigue scrollando. El contenido interior se anima mientras el contenedor está "pinado". Perfecto para secciones de storytelling.
pin: true, end: "+=1000"Anima múltiples elementos que entran en viewport simultáneamente con un solo stagger coordinado. Alternativa eficiente al IntersectionObserver.
ScrollTrigger.batch(".cards", ...)ScrollTrigger mapea el scroll position a rangos de animación. Cada tipo de configuración produce un comportamiento diferente.
El patrón más potente: una timeline GSAP controlada por scroll con el elemento padre fijado. Todas las animaciones dentro de la timeline se sincronizan con el scroll.
pin: true fija el trigger; scrub: 1 suaviza.
// 1. Registrar el plugin (una vez) gsap.registerPlugin(ScrollTrigger); // 2. Timeline con scrub + pin const tl = gsap.timeline({ scrollTrigger: { trigger: ".container", start: "top top", end: "+=2000", scrub: 1, pin: true, markers: false // true solo en dev } }); // 3. Tweens hijos — sin scrollTrigger propio tl.to(".title", { y: -60, opacity: 0 }) .to(".panel-2",{ x: 0, opacity: 1 }, "<+0.2") .to(".panel-3",{ scale: 1, opacity: 1 }); // 4. Batch para stagger coordinado ScrollTrigger.batch(".card", { start: "top 85%", once: true, onEnter: (els) => gsap.to(els, { opacity: 1, y: 0, stagger: 0.15, overwrite: true }) }); // 5. Cleanup en SPA (React / Vue) ScrollTrigger.getAll() .forEach(t => t.kill());
Cada patrón resuelve un problema específico de UX. Usa el adecuado según el efecto que buscas.
Pina una sección y mueve el contenido en X mientras el usuario hace scroll vertical. Usa containerAnimation y ease: "none" obligatoriamente.
Elementos que se mueven a velocidades distintas durante el scroll. Combina múltiples tweens con diferentes start/end y scrub.
Tarjetas que entran en viewport con stagger coordinado. Mucho más eficiente que un ScrollTrigger por elemento, especialmente en listas largas.
ScrollTrigger.batch()Cuando usas smooth scroll de terceros, necesitas scrollerProxy() para que ScrollTrigger lea la posición correcta del scroll virtual.
El playhead "salta" a puntos concretos al soltar el scroll. Define snap: 1/N para N secciones, o un array de valores de progreso.
Añade/elimina clases CSS cuando el ScrollTrigger entra y sale. Útil para activar transiciones CSS o cambiar el estado de la UI sin necesidad de tweens.
toggleClassgsap.registerPlugin(ScrollTrigger) una sola vez antes de cualquier uso.
ease: "none" en el tween horizontal cuando uses containerAnimation.
ScrollTrigger.refresh() tras cambios de DOM o carga de imágenes dinámicas.
useGSAP() de @gsap/react para cleanup automático.
refreshPriority.
scrub y toggleActions en el mismo ScrollTrigger; scrub siempre gana.
ease distinto de "none" en la animación horizontal con containerAnimation.
markers: true en producción. Solo para desarrollo.
getAll().forEach(t => t.kill()).
Cultiva Digital Studio implementa animaciones scroll-driven de alto impacto. Desde demos técnicas hasta producción.