gsap · mengto — Claude Code skill: GSAP animations and ScrollTrigger
A skill that helps your coding agent write and debug GSAP web animations: timelines, ScrollTrigger, stagger, transforms.
npx skills add MengTo/Skills --skill gsap -a claude-codeWhat gsap does
The skill kicks in when a project needs GSAP motion — element entrances, micro-interactions, page transitions, scroll-driven scenes. Your agent gets a reference for the API: gsap.to, gsap.from, gsap.fromTo, timelines with the position parameter, eases like power2.out and elastic.out(1, 0.3), and stagger with each, from and grid options.
ScrollTrigger has its own section. It covers registering the plugin, the inline scrollTrigger var, and the full config with trigger, start, end, scrub, pin, snap, markers. Then the usual breakages: animating top/left/width instead of transforms, a trigger that never fires because of sizing or a nested scroll container, leaks in SPAs when there is no gsap.context() and revert on unmount, and FOUC from starting before fonts and images load.
Three recipes ship with it: a staggered hero entrance, a sequenced nav-title-CTA timeline, and a pinned section with scroll scrub. When the brief is vague, the skill tells the agent to ask whether you are on a static site or an SPA, whether you need pin and scrub, and what your mobile and reduced-motion constraints are. Worth installing if GSAP is already in your stack — without the library, the API notes have nothing to attach to.
What it helps with
- build one sequenced timeline instead of scattered CSS transitions
- fix a ScrollTrigger that never fires inside a nested scroll container
- stop jank by animating transforms instead of top and left
- clean up animation leaks when a React component unmounts
- kill the flash of content before fonts and images load
Example prompts for the agent
- Add a staggered GSAP entrance for the hero section on elements with data-anim
- Build a timeline for the nav, title and CTA with overlapping timing
- Set up a ScrollTrigger with pin and scrub for the story section
How to install gsap
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill gsap -a claude-code2Manually: put the files in place
~/.claude/skills/gsap/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/gsap/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill gsap -a codex2Manually: put the files in place
.agents/skills/gsap/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill gsap -a cursor2Manually: put the files in place
.cursor/skills/gsap/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install MengTo/Skills gsap2Manually: put the files in place
.github/skills/gsap/SKILL.md1Skills CLI (Vercel)
npx skills add MengTo/Skills --skill gsap -a gemini-cli2Platform CLI
gemini skills install https://github.com/MengTo/Skills --path agent-skills/web-design/gsapManually: put the files in place
.devin/skills/gsap/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add MengTo/Skills --skill gsap -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about gsap
How do I install gsap in Claude?
Run npx skills add MengTo/Skills --skill gsap -a claude-code. The skill file lands at ~/.claude/skills/gsap/SKILL.md.
What does the gsap skill do?
It gives your agent a GSAP reference: tweens, timelines, eases, stagger, ScrollTrigger, plus the common pitfalls. It works across HTML, CSS, JS and React.
Do I need GSAP itself in my project?
Yes. The skill documents the GSAP library and its ScrollTrigger plugin, so the patterns it suggests need GSAP loaded to run.
Source text
SKILL.md · MIT
---
name: gsap
description: Use when you need to add or debug professional web animations with GSAP (timelines, ScrollTrigger, stagger, transforms) in HTML/CSS/JS/React. Includes patterns for smooth motion, performance, and common pitfalls.
---
# GSAP (GreenSock) — Web Animation Skill
## When to use
- High-quality UI/motion design: entrances, micro-interactions, page transitions
- Timeline-based sequences (vs. scattered CSS transitions)
- Scroll-driven storytelling (with ScrollTrigger)
- Complex easing, staggering, orchestration across many elements
## Key concepts & APIs
- Tweens:
- `gsap.to(targets, vars)`
- `gsap.from(targets, vars)`
- `gsap.fromTo(targets, fromVars, toVars)`
- Timelines:
- `const tl = gsap.timeline({ defaults, repeat, yoyo, paused })`
- Chain: `tl.to(...).from(...).addLabel('x').add(() => ...)`
- Position parameter: absolute `1.2`, relative `"+=0.5"`, overlap `"-=0.3"`, label `"intro"`
- Eases: `ease: "power2.out"`, `"expo.inOut"`, `"elastic.out(1, 0.3)"`
- Staggers: `stagger: 0.05` or `{ each, from: "start|center|end|random", grid }`
- Performance-friendly properties:
- Prefer transforms (`x`, `y`, `scale`, `rotation`) and opacity (`autoAlpha`)
- ScrollTrigger (plugin):
- `gsap.registerPlugin(ScrollTrigger)`
- Inline: `gsap.to(".box", { scrollTrigger: ".box", x: 500 })`
- Advanced: `scrollTrigger: { trigger, start, end, scrub, pin, snap, markers }`
- Standalone: `ScrollTrigger.create({ trigger, start, end, onUpdate, onToggle })`
## Common pitfalls (and fixes)
- Animating layout properties (top/left/width/height) → jank
- Use transforms, add `will-change: transform`, avoid forced reflow.
- ScrollTrigger “not firing” due to wrong trigger sizing/overflow containers
- Ensure trigger exists, has height, and check scroll container (nested scrolling needs config).
- Not cleaning up in SPA/React
- Use `gsap.context()` and revert on unmount; kill triggers (`ScrollTrigger.getAll().forEach(t => t.kill())`) if needed.
- FOUC / measuring before fonts/images load
- Initialize after layout is stable; run `ScrollTrigger.refresh()` after images load.
## Quick recipes
### 1) Hero entrance (stagger)
```js
gsap.from(".hero [data-anim]", {
y: 24,
autoAlpha: 0,
duration: 0.8,
ease: "power2.out",
stagger: 0.06,
});
```
### 2) Sequenced timeline
```js
const tl = gsap.timeline({ defaults: { ease: "power2.out", duration: 0.6 } });
tl.from(".nav", { y: -20, autoAlpha: 0 })
.from(".hero-title", { y: 30, autoAlpha: 0 }, "-=0.2")
.from(".hero-cta", { scale: 0.95, autoAlpha: 0 }, "-=0.2");
```
### 3) Scroll-scrub pinned section
```js
gsap.registerPlugin(ScrollTrigger);
gsap.timeline({
scrollTrigger: {
trigger: ".story",
start: "top top",
end: "+=800",
scrub: 1,
pin: true,
},
}).to(".story .panel", { xPercent: -200 });
```
## What to ask the user (if requirements unclear)
- Is this a static site or SPA (React/Next/Vue)? Any page transitions?
- Do we need scroll-driven sections (pin/scrub/snap)?
- Performance constraints (mobile support, reduced motion)?
© MengTo · MIT · MengTo/Skills
Similar skills
Everything for Frontend and UI →gsap by other authors comes first.