# Gsap Frameworks > Skill oficial de GSAP para Vue, Svelte y otros frameworks no-React: ciclo de vida, acotado de selectores y limpieza al desmontar. Para React, usa gsap-react. Fuente: https://skillsagentes.com/skills/calesthio/openmontage/gsap-frameworks Markdown: https://skillsagentes.com/skills/calesthio/openmontage/gsap-frameworks.md Repositorio: https://github.com/calesthio/OpenMontage Autor: calesthio Licencia: MIT Actualizado: hace 4 meses Coste de contexto: 89 tok instalada, 1.6k tok al activarse, 1.6k tok con todos los archivos del bundle Bundle: 1 archivo, 6 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent claude-code # Cursor npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent cursor # Codex npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent codex # Gemini CLI npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent gemini # Windsurf npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent windsurf # Cline npx -y skills add calesthio/OpenMontage --skill gsap-frameworks --agent cline ``` ## Qué hace - Explica cómo usar GSAP en Vue, Nuxt, Svelte y SvelteKit siguiendo el ciclo de vida del componente - Crea las animaciones en `onMounted` / `onMount`, nunca en el setup, porque el DOM aún no existe - Acota los selectores pasando el contenedor como scope a `gsap.context()` - Llama a `ctx.revert()` al desmontar para matar tweens y ScrollTriggers y revertir estilos en línea - Recuerda registrar los plugins una vez a nivel de app, no en cada render ## Cuándo usarla - Se quiere animación en Vue, Nuxt, Svelte o SvelteKit - El usuario pregunta por GSAP con `onMounted`, `onMount` u `onDestroy` - Se revisa código GSAP dentro de un framework de componentes con ciclo de vida ## Cuándo no - React: usa el skill `gsap-react` ## Qué la activa - "Anima este componente de Vue con GSAP" - "¿Cómo limpio los ScrollTriggers al desmontar en Svelte?" - "Monta esta animación en Nuxt sin fugas" ## Archivos - SKILL.md — 6 KB ## SKILL.md Reproducido tal cual desde calesthio/OpenMontage bajo MIT. Esta sección es el documento original y está en inglés. # GSAP with Vue, Svelte, and Other Frameworks ## When to Use This Skill Apply when writing or reviewing GSAP code in Vue (or Nuxt), Svelte (or SvelteKit), or other component frameworks that use a lifecycle (mounted/unmounted). For **React** specifically, use **gsap-react** (useGSAP hook, gsap.context()). **Related skills:** For tweens and timelines use **gsap-core** and **gsap-timeline**; for scroll-based animation use **gsap-scrolltrigger**; for React use **gsap-react**. ## Principles (All Frameworks) - **Create** tweens and ScrollTriggers **after** the component’s DOM is available (e.g. onMounted, onMount). - **Kill or revert** them in the **unmount** (or equivalent) cleanup so nothing runs on detached nodes and there are no leaks. - **Scope selectors** to the component root so `.box` and similar only match elements inside that component, not the rest of the page. ## Vue 3 (Composition API) Use **onMounted** to run GSAP after the component is in the DOM. Use **onUnmounted** to clean up. ```javascript import { onMounted, onUnmounted, ref } from "vue"; import { gsap } from "gsap"; import { ScrollTrigger } from "gsap/ScrollTrigger"; gsap.registerPlugin(ScrollTrigger); // once per app, e.g. in main.js export default { setup() { const container = ref(null); let ctx; onMounted(() => { if (!container.value) return; ctx = gsap.context(() => { gsap.to(".box", { x: 100, duration: 0.6 }); gsap.from(".item", { autoAlpha: 0, y: 20, stagger: 0.1 }); }, container.value); }); onUnmounted(() => { ctx?.revert(); }); return { container }; } }; ``` - ✅ **gsap.context(scope)** — pass the container ref (e.g. `container.value`) as the second argument so selectors like `.item` are scoped to that root. All animations and ScrollTriggers created inside the callback are tracked and reverted when **ctx.revert()** is called. - ✅ **onUnmounted** — always call **ctx.revert()** so tweens and ScrollTriggers are killed and inline styles reverted. ## Vue 3 (script setup) Same idea with ` ``` ## Svelte Use **onMount** to run GSAP after the DOM is ready. Use the **returned cleanup function** from onMount (or track the context and clean up in a reactive block / component destroy) to revert. Svelte 5 uses a different lifecycle; the same principle applies: create in “mounted” and revert in “destroyed.” ```javascript
Box
Item
``` - ✅ **bind:this={container}** — get a reference to the root element so you can pass it to **gsap.context(scope)**. - ✅ **return () => ctx.revert()** — Svelte’s onMount can return a cleanup function; call **ctx.revert()** there so cleanup runs when the component is destroyed. ## Scoping Selectors Do not use global selectors that can match elements outside the current component. Always pass the **scope** (container element or ref) as the second argument to **gsap.context(callback, scope)** so that any selector run inside the callback is limited to that subtree. - ✅ **gsap.context(() => { gsap.to(".box", ...) }, containerRef)** — `.box` is only searched inside `containerRef`. - ❌ Running **gsap.to(".box", ...)** without a context scope in a component can affect other instances or the rest of the page. ## ScrollTrigger Cleanup ScrollTrigger instances are created when you use the `scrollTrigger` config on a tween/timeline or **ScrollTrigger.create()**. They are **included** in **gsap.context()** and reverted when you call **ctx.revert()**. So: - Create ScrollTriggers inside the same **gsap.context()** callback you use for tweens. - Call **ScrollTrigger.refresh()** after layout changes (e.g. after data loads) that affect trigger positions; in Vue/Svelte that often means after the DOM updates (e.g. nextTick in Vue, tick in Svelte, or after async content load). ## When to Create vs Kill | Lifecycle | Action | |-----------------|--------| | **Mounted** | Create tweens and ScrollTriggers inside **gsap.context(scope)**. | | **Unmount / Destroy** | Call **ctx.revert()** so all animations and ScrollTriggers in that context are killed and inline styles reverted. | Do not create GSAP animations in the component’s setup or in a synchronous top-level script that runs before the root element exists. Wait for **onMounted** / **onMount** (or equivalent) so the container ref is in the DOM. ## Do Not - ❌ Create tweens or ScrollTriggers before the component is mounted (e.g. in setup without onMounted); the DOM nodes may not exist yet. - ❌ Use selector strings without a **scope** (pass the container to gsap.context() as the second argument) so selectors don’t match elements outside the component. - ❌ Skip cleanup; always call **ctx.revert()** in onUnmounted / onMount’s return so animations and ScrollTriggers are killed when the component is destroyed. - ❌ Register plugins inside a component body that runs every render (it doesn't hurt anything, it's just wasteful); register once at app level. ### Learn More - **gsap-react** skill for React-specific patterns (useGSAP, contextSafe). ## Dónde encaja - Categoría: [Diseño y UI](https://skillsagentes.com/categorias/diseno-ui.md) — Sistemas de diseño, trabajo con componentes y acabado visual. - Creador: [calesthio](https://skillsagentes.com/creators/calesthio.md) — 0 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Seedance 2 5](https://skillsagentes.com/skills/calesthio/openmontage/seedance-2-5.md): Genera vídeo cinematográfico de 4-30 s con ByteDance Seedance 2.5 por fal.ai, Volcengine Ark, Runway o ComfyUI. Cubre el contrato de prompt 2.5, cortes duros, locks de continuidad y voz. - [Comfyui](https://skillsagentes.com/skills/calesthio/openmontage/comfyui.md): Úsalo al trabajar con workflows de ComfyUI en OpenMontage: comfyui_image/video/music, workflows propios, selección de output_node, modelos que faltan, LoRAs, poca VRAM e importación de workflows de la comunidad. - [Fish Audio Tts](https://skillsagentes.com/skills/calesthio/openmontage/fish-audio-tts.md): Genera narración expresiva y multilingüe con fish.audio (modelos S1 / S2) y reutiliza voces clonadas mediante reference_id. - [Minimax H3](https://skillsagentes.com/skills/calesthio/openmontage/minimax-h3.md): Genera vídeo con MiniMax H3 (Hailuo 3.0) por la API oficial v2, fal.ai, Runway, nodos partner de ComfyUI o pesos abiertos locales. Clips de 4-15s a 2K con animación de primer/último fotograma. - [Gemini Omni](https://skillsagentes.com/skills/calesthio/openmontage/gemini-omni.md): Genera y edita conversacionalmente vídeos cortos con Google Gemini Omni Flash: itera con ediciones en lenguaje natural, clips de 3-10s a 720p con audio y texto en pantalla, e imágenes de referencia por etiquetas. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)