En los propios términos del Skill
Guía oficial de GSAP para animar componentes de Vue, Nuxt, Svelte y SvelteKit, donde el ciclo de vida del framework decide cuándo existen los nodos del DOM. Indica al agente que cree tweens y ScrollTriggers solo después del montaje —onMounted en Vue, onMount en Svelte— dentro de gsap.context(scope), pasando el ref del contenedor como segundo argumento, de modo que selectores como .box permanezcan dentro de ese componente.
Al desmontar, ctx.revert() detiene las animaciones y los ScrollTriggers y revierte los estilos en línea. También cubre un composable useGSAP de Nuxt 4 que registra ScrollTrigger una sola vez y carga de forma diferida (lazy load) plugins como SplitText mediante importación dinámica, además de actualizar las posiciones de los triggers tras cambios en el layout.
Qué produce
- Un proyecto de ejemplo ejecutable con Vite + Vue 3 que demuestra los patrones de contexto y limpieza.
- Un composable de Nuxt, utilizado en los componentes mediante useGSAP(), que expone la instancia de gsap y el método de carga diferida.
- Un helper tipado lazyLoadPlugin que importa dinámicamente un plugin, lo registra con gsap y lo devuelve.
Cómo funciona
- 01Esperar al DOM Antes de Crear
Los tweens y ScrollTriggers solo se crean una vez que el DOM del componente está disponible, usando onMounted en Vue u onMount en Svelte, de modo que el ref del contenedor realmente exista.
- 02Limitar el Alcance a la Raíz del Componente
Toda la configuración de la animación se envuelve en gsap.context(callback, scope), pasando el ref del contenedor como segundo argumento para que selectores como .item se resuelvan solo dentro de ese subárbol.
- 03Revertir en el Desmontaje del Framework
Cada ejemplo guarda el contexto en una variable y llama a ctx.revert() desde onUnmounted (Vue) o desde la función de limpieza devuelta por onMount (Svelte).
- 04Actualizar Tras Cambios en el Layout
Las posiciones de ScrollTrigger se recalculan una vez que el layout se estabiliza, por ejemplo después de que la carga de datos cambie las posiciones de los triggers.