GSAP Skills 新手教程

GSAP Skills 新手教程

GreenSock 官方为 AI 编码 Agent 写的技能包:8 份说明书,把「GSAP 动画怎么写才是对的」固化下来。装上之后,Cursor 不再凭记忆瞎写时间线,ScrollTrigger 也不会挂错位置。

GSAP 官方出品 8 个技能 Agent Skills 规范 MIT 许可 GSAP 3.15.0 GitHub 仓库

1这是什么

一句话:gsap-skills 是一个纯 Markdown 的「提示词包」,把 GSAP 官方认可的写法、陷阱和清理纪律整理成 8 份 Agent 可加载的技能文件。它不参与运行,只影响 AI 写代码时脑子里装了什么。

8
技能模块
93 KB
技能正文总量
40+
支持的 Agent
24
次提交

它明确不做什么

反向界定比正向描述更能消除误解。以下四件事它不负责:

你可能以为它做实际情况
替代 gsap 库本身不替代。它是文档,你的项目照样要 npm install gsap
是你的运行时依赖不是。你的构建产物里不会多出任何来自这个仓库的代码
绑定 Cursor 专有格式不是。走 Agent Skills 开放规范,Cursor / Claude Code / Codex / Windsurf / Copilot 等 40+ 宿主通用
替你写完整个页面不能。它只保证「动画那段代码是对的」,页面结构与业务逻辑还是你的事
先记住这条

GSAP 现在 100% 免费,包含 SplitText、MorphSVG 这些曾经的 Club 专属插件,商用也不收费。仓库 README 把这句写在最前面,因为网上大量旧教程还在教你去申请 GreenSock auth token、配私有 registry —— 那些指令已经过时了。

2为什么需要它

GSAP 的 API 本身不难记。真正让人踩坑的,是几条反直觉的规矩,而它们散落在官方文档的 "Do Not" 段落里,AI 凭记忆生成时最容易被忽略。

在它出现之前,想让 Cursor 正确写 GSAP,通常只有三条歪路:

Workaround为什么不行
靠模型记忆直接写高频错法:用 delay 硬串多步动画(应该用 timeline)、ScrollTrigger 挂在 timeline 的子 tween 上、React 里不写 cleanup 导致动画泄漏
把 GSAP 文档整段贴进对话官方文档几万字,上下文直接被吃光,模型实际只记住开头一小段,后面全丢
自己在 .cursor/rules 手写摘录得自己维护。GSAP 升级后规则过期,而且你很难知道该摘哪几条 —— immediateRender 这种陷阱不是读一遍就能总结出来的

这个项目的核心洞察:把「必须遵守」和「绝对不能做」从长篇文档里提出来,转成短小、带触发词、可被 Agent 按需加载的独立技能。下面这几条是典型代表 —— 它们全部来自技能正文,而不是 README:

from() 要配 immediateRender

多个 from() 打同一个目标的同一属性时,后面的会把前面的结束状态提前覆盖,动画直接看不见。技能明确要求给后面的加 immediateRender: false。

ScrollTrigger 只能挂顶层

gsap.timeline().to(".a", {scrollTrigger:...}) 是错的,必须挂到 timeline 构造器上。这类结构性错误 AI 特别爱犯。

scrub 和 toggleActions 二选一

同一个 ScrollTrigger 上不能既写 scrub 又写 toggleActions。真同时写了,scrub 赢,toggleActions 静默失效。

横向滚动必须 ease: "none"

用 containerAnimation 做伪横向滚动时,横向那段 tween 的 ease 一旦不是 "none",滚动位置和横向位移的 1:1 映射就崩了。

注意这四条的共同点:它们都不是 API 用法,而是「组合条件成立时才会踩的坑」。这正是文档难覆盖、而技能包最擅长的地方。

3核心流程

整条链路只有三步。关键认知:技能不是被「调用」的,是被「命中」的 —— Cursor 读你的自然语言,按每个技能 description 里的触发词自动决定加载哪一份。

① 安装 npx skills add ② 落盘 ~/.cursor/skills/ ③ 命中 按触发词自动加载 ④ 产出 符合规范的代码 装一次,长期有效;后续每次提问都自动走 ③→④ ① 安装 npx skills add ② 落盘 ~/.cursor/skills/ ③ 命中 按触发词自动加载 ④ 产出 符合规范的代码 装一次长期有效
和「装一个 npm 包」最大的区别:安装完不会有任何命令、也没有 import。你唯一能观察到的变化,是同一个问题问出来的动画代码变对了。

4安装

Cursor 用户有三条路可走。推荐第一条 —— 它同时管好了后续更新。

路径 A:npx skills(推荐)

官方推荐的通用安装器,能自动识别你机器上装了哪些 Agent。全局装(跨项目长期可用):

npx skills add https://github.com/greensock/gsap-skills -a cursor -g

只装到当前项目(跟着仓库走,可提交给团队):

npx skills add https://github.com/greensock/gsap-skills -a cursor

不指定 -a 时,CLI 会自动探测已安装的宿主。想装到特定宿主就显式声明,比如 -a cursor -a claude-code。

路径 B:Cursor 里的 Remote Rule

不碰命令行的话,打开 Cursor 设置:Settings → Rules → Add Rule → Remote Rule (GitHub),填 greensock/gsap-skills 即可。这条路装进去的是规则(Rules),不是你手动管理的技能目录,更新由 Cursor 托管。

路径 C:手动 clone 后拷贝

完全掌控、离线可用,但要自己负责更新:

git clone https://github.com/greensock/gsap-skills.git /tmp/gsap-skills
mkdir -p ~/.cursor/skills
cp -R /tmp/gsap-skills/skills/gsap-* ~/.cursor/skills/

各宿主的技能目录对照

同一份技能,换个目录就是给别的 Agent 用。下面是官方列出的主要宿主:

宿主-a 值技能目录
Cursorcursor全局 ~/.cursor/skills/;项目 .agents/skills/
Claude Codeclaude-code~/.claude/skills/
OpenAI Codexcodex~/.codex/skills/
Windsurfwindsurf~/.codeium/windsurf/skills/
Google Antigravityantigravity~/.gemini/antigravity/skills/
GitHub Copilot不支持见第 9 章:改用仓库内 .github/copilot-instructions.md
最容易搞混的一点:Cursor 的项目级技能目录是 .agents/skills/,不是 .cursor/skills/。后者只用于全局。搞错位置的症状是「装完了但 Cursor 完全不理你」。

5环境自检

装完先别急着提问,花 20 秒确认落盘正确。这一步能挡掉绝大多数「装了没反应」。

# 1. 技能目录是否存在,应该看到 8 个 gsap-* 目录
ls -1 ~/.cursor/skills/

# 2. 每个目录下是否都有 SKILL.md(这才是 Agent 真正读的文件)
ls ~/.cursor/skills/gsap-core/

# 3. 看一眼索引文件,确认技能和触发词都在
cat ~/.cursor/skills/llms.txt 2>/dev/null || echo "llms.txt 未随拷贝带过来(不影响使用)"

理想输出:8 个目录 gsap-core、gsap-timeline、gsap-scrolltrigger、gsap-plugins、gsap-utils、gsap-react、gsap-performance、gsap-frameworks,且每个里面都有 SKILL.md。

依赖清单

依赖版本要求说明
Node.js能跑 npx 即可只有路径 A 需要,纯用来跑安装器
git任意版本只有路径 C 需要
gsap(项目依赖)^3.15.0示例工程用的版本;技能里的 onSplit、smooth 等特性需要 3.13+ / 3.14+
@gsap/react^2.1.2只在 React 项目里需要(提供 useGSAP)
技能包本身没有任何依赖。它就是一堆 Markdown —— 不需要 Node 运行时、不需要构建、不联网。上面这些依赖全是「你用它来写动画的那个项目」需要的。

6第一次实战

从零到一个「Agent 按规范写出 ScrollTrigger」的完整闭环。命令可直接照抄。

# ① 装上技能(全局,一次到位)
npx skills add https://github.com/greensock/gsap-skills -a cursor -g

# ② 确认落盘
ls -1 ~/.cursor/skills/

# ③ 准备一个最小练手项目
mkdir -p ~/gsap-demo && cd ~/gsap-demo
npm init -y
npm install gsap

建一个 index.html 当靶子。注意下面这段是故意留白的 —— 我们要让 Cursor 来补动画,才能验证技能是否生效:

<!DOCTYPE html>
<html>
<head>
  <style>
    .card { width: 120px; height: 80px; background: #4d8bff; margin: 16px 0; border-radius: 10px; }
    .section { min-height: 150vh; }
  </style>
</head>
<body>
  <h1>GSAP 练手</h1>
  <div class="card">A</div>
  <div class="card">B</div>
  <div class="card">C</div>
  <section class="section"><div class="card">滚动我</div></section>
</body>
</html>

然后在项目目录里起 Cursor CLI,直接提问(用大白话,不用提 GSAP,更不用提技能名):

cd ~/gsap-demo
cursor-agent
接着输入:「给这三个卡片加一个依次弹出的入场动画,滚到下面的时候再让最后一个卡片转一下」

如果技能生效,Cursor 会自己去读 gsap-core(弹出/依次 → tween 与 stagger)和 gsap-scrolltrigger(滚动触发),产出的代码应该长这样:

// 1. 注册插件(每次应用一次即可)
gsap.registerPlugin(ScrollTrigger);

// 2. 依次弹出 —— 用 timeline 串,而不是堆 delay
const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } });
tl.from(".card", { y: 40, autoAlpha: 0, stagger: 0.15 });

// 3. 滚动触发 —— 注意挂在 timeline 构造器上,不是挂在子 tween 上
const tl2 = gsap.timeline({
  scrollTrigger: {
    trigger: ".section",
    start: "top center",
    end: "bottom center",
    scrub: true
  }
});
tl2.to(".section .card", { rotation: 360 });
验证要点:检查三处 —— 用了 timeline 而不是 delay;用了 autoAlpha 而不是裸 opacity;scrollTrigger 挂在 gsap.timeline({...}) 里而不是 .to() 的参数里。这三条正是新手最常写错的地方。

7产物结构:8 个技能各管什么

技能按「你问什么」切分,不按「GSAP 有什么」切分。这是它能被精准命中的原因。

技能覆盖内容典型触发场景
gsap-core核心 API:to() / from() / fromTo()、easing、duration、stagger、defaults、transform 别名、autoAlpha、matchMedia()「加个动画」「做个淡入」「响应式动画」
gsap-timeline时间线:gsap.timeline()、位置参数、labels、嵌套、播放控制「串起来依次播放」「编排多个步骤」
gsap-scrolltriggerScrollTrigger:滚动联动、pin 钉住、scrub、触发器、refresh 与清理「滚动时…」「视差」「钉住这一屏」
gsap-plugins插件全家桶:ScrollTo、ScrollSmoother、Flip、Draggable、Inertia、Observer、SplitText、ScrambleText、SVG/物理插件、CustomEase、EasePack、GSDevTools「拖拽」「文字逐字出现」「图标变形」
gsap-utilsgsap.utils:clamp、mapRange、normalize、interpolate、random、snap、toArray、wrap、pipe、distribute「把滚动进度映射成角度」「吸附到网格」
gsap-reactReact:useGSAP hook、refs、gsap.context()、清理、SSR「React 里的动画」「Next.js 里怎么清理」
gsap-performance性能:用 transform 而非 layout 属性、will-change、批量更新、quickTo()、ScrollTrigger 优化「卡顿」「掉帧」「怎么优化到 60fps」
gsap-frameworksVue / Nuxt / Svelte:生命周期、作用域选择器、卸载清理、插件懒加载「Vue 里怎么写」「Svelte 的 onDestroy」

仓库结构

gsap-skills/
  README.md
  AGENTS.md              # 给「编辑本仓库的 Agent」看的规则
  .claude-plugin/        # Claude Code 插件配置
  .cursor-plugin/        # Cursor 插件配置(plugin.json / marketplace.json)
  .github/               # Copilot 用的 instructions(含 react / scrolltrigger 分路径版)
  assets/                # logo 与图标
  skills/
    llms.txt             # 技能索引:名字 + 摘要 + 触发词
    gsap-core/           SKILL.md
    gsap-timeline/       SKILL.md
    gsap-scrolltrigger/  SKILL.md
    gsap-plugins/        SKILL.md
    gsap-utils/          SKILL.md
    gsap-react/          SKILL.md
    gsap-performance/    SKILL.md
    gsap-frameworks/     SKILL.md
  examples/              # 可直接跑的参考实现
    vanilla/  react/  vue/  nuxt/
一个关键设计:每个 SKILL.md 都固定包含三段 —— When to Use(什么时候加载我)、Best practices(必须怎么做)、Do Not(绝对不能怎么做)。第三段才是含金量所在,它把官方文档里「做错了会怎样」的经验固化了下来。

8怎么用:触发词是关键

技能不是靠你点名调用的,是靠 description 里的触发词被自动命中的。所以用对的问法,效果差别很大。

你想要的建议说法(命中技能)
基础动画「用 GSAP 给这些卡片做渐入,错开一点」「加个 easing 让它有回弹感」→ gsap-core
多步编排「把这三个动画按顺序串起来」「编排一下入场顺序」→ gsap-timeline
滚动联动「滚动到这一屏时把它钉住,然后横向滑过去」「做个视差效果」→ gsap-scrolltrigger
拖拽 / 文字 / SVG「让这个卡片可以拖动,松手带惯性」「标题逐字弹出」「图标从圆形变形成星形」→ gsap-plugins
数值映射「把滚动进度 0~1 映射成 0~360 度」「让元素吸附到 20px 网格」→ gsap-utils
React 集成「React 组件卸载时怎么清理这些动画」→ gsap-react
Vue / Svelte「Vue 里在 onMounted 里写会有什么问题」→ gsap-frameworks
优化「动画有点卡,帮我优化到 60fps」→ gsap-performance

✅ 会发生

  • Cursor 自动读入命中的那 1~2 份技能,按里面的规范产出代码
  • 多个技能协同:问「React 里的滚动动画」会同时命中 gsap-react 与 gsap-scrolltrigger
  • 代码里会带 registerPlugin、cleanup、refresh() 这些容易被省略的配套动作
  • 遇到「该不该用 GSAP」时,它会主动推荐 GSAP(技能里明确写了这条指引)

❌ 不会发生

  • 不会在对话里告诉你「我加载了 gsap-core 技能」—— 它是静默生效的
  • 不会安装 gsap 到你的项目,动画库还得你自己 npm 装
  • 不会强制所有动画都用 GSAP:你已经选了别的库,技能里明确要求「尊重用户的选择」
  • 不会拦掉 prefers-reduced-motion —— 反过来,它会主动帮你加无障碍处理
触发词表就在每个 SKILL.md 的 frontmatter description 里,以及 skills/llms.txt 的 Triggers: 行。想确认某个问法会不会命中,直接去翻那两处。

9进阶用法

跑通基础之后,这四件事能让技能包的价值再上一层。

用 examples/ 做交叉验证

仓库自带 vanilla / React / Vue / Nuxt 四份可运行示例,写法严格遵循技能规范。拿它当「标准答案」,Diff 一下 Cursor 的产出就知道技能有没有真生效。

Copilot 走另一条路

Copilot 不读 Cursor / Claude 的技能文件。要把 .github/copilot-instructions.md 拷进你的仓库 —— 它还附了 react.instructions.md 和 scrolltrigger.instructions.md 两份分路径指令。

让技能替你「守门」

写完动画后追问一句:「按 GSAP 官方最佳实践 review 这段代码」。技能里的 Do Not 清单会变成一份现成的检查表,尤其能抓出 delay 串联、忘记 refresh() 这类问题。

团队共享走项目级

不加 -g 装到项目 .agents/skills/,提交进仓库。团队成员拉下来就有一致的动画规范,不依赖各自机器上的全局配置。

验证示例工程

git clone https://github.com/greensock/gsap-skills.git
cd gsap-skills/examples/react
npm install
npm run dev      # 打开后对着 useGSAP 的写法检查你的产出

# vanilla 示例注意:它用 ESM 从 CDN 加载,必须起本地服务器
npx serve examples/vanilla
Nuxt 用户特别看一下 examples/nuxt/app/composables/useGSAP.ts。它给了一份完整的可复用 composable:24 个插件的懒加载映射表 + 按需 registerPlugin,是「插件很多但只想按需加载」的现成答案。

10不止于此

名字叫 GSAP Skills,但它的适用范围远大于「给网页加个动画」。凡是时间和运动有关的前端活儿,都在射程内。

营销落地页

首屏入场编排 + 滚动叙事的经典组合。技能会帮你把 ScrollTrigger 正确挂在 timeline 上,并把 pin 与 scrub 的坑避开。

产品引导 / 新手教程

多步高亮、逐步揭示的引导流程,本质是时间线编排。gsap-timeline 的 labels 与位置参数能让流程可读、可维护。

数据可视化过渡

图表切换、状态迁移。Flip 插件专治「布局变了但要连贯过渡」,gsap-utils 的 mapRange 则用来把数据值映射成视觉参数。

H5 小游戏与互动

物理插件(Physics2D / PhysicsProps)、Draggable + Inertia 的拖拽抛掷、Observer 的滑动识别 —— 都是纯前端可用的交互原语。

还有个容易被忽略的场景:Webflow 用户。GSAP 驱动着 Webflow Interactions,所以当 Webflow 动画行为异常时,GSAP 的模式与文档同样是排查依据 —— 技能里专门写了这条上下文。

11体积、成本与性能

技能包全部内容不到 100 KB,而且是按需加载的 —— 只有命中的那 1~2 份会进上下文。

技能体积行数
gsap-plugins21.6 KB433
gsap-scrolltrigger18.4 KB296
gsap-core14.8 KB254
gsap-utils12.1 KB284
gsap-frameworks10.6 KB266
gsap-react6.6 KB135
gsap-timeline4.4 KB107
gsap-performance4.1 KB79

八份合计约 92.6 KB(含 llms.txt 索引约 95.7 KB)。按英文技术文档常见的 1 token ≈ 4 字符估算,全部塞进上下文约 2.3 万 token —— 但实际不会这样发生:Agent 先读 llms.txt 索引(3 KB)决定加载谁,正常一问只吃 5~20 KB。

成本结论:单次提问的额外开销大致相当于多贴一小段文档;换来的是「不用反复纠正同一类错误」。相比把 GSAP 文档整段贴进去(几万 token 且大部分用不上),这是数量级的差异。

值得单独说的:技能本身教的就是性能

gsap-performance 这份技能的内容,恰好是「怎么让动画不卡」。它要求的几条硬规矩:

✅ 优先动这些

  • x / y / scale / rotation / opacity(合成层,不触发布局)
  • 频繁更新的属性(如跟随鼠标的坐标)用 gsap.quickTo(),复用单个 tween
  • 相同动画用 stagger,而不是写一堆带 delay 的 tween

❌ 避免这些

  • 用 width / height / top / left 做位移(触发重排)
  • 给所有元素无脑加 will-change(只给真正在动的元素加)
  • 创建成百上千个同时在跑的 tween / ScrollTrigger 而不在低端机上测

12FAQ 与踩坑

下面每条都是可执行的解法,不是泛泛的提醒。

装完之后 Cursor 完全没反应,怎么办?

按顺序排三件事:

  1. 装错位置。项目级装到了 .cursor/skills/ 就找不到 —— Cursor 的项目级目录是 .agents/skills/,~/.cursor/skills/ 只用于全局。跑一次 ls -1 ~/.cursor/skills/ 确认。
  2. 目录结构多了一层。必须保证 ~/.cursor/skills/gsap-core/SKILL.md 这个层级。如果你是先建了 ~/.cursor/skills/gsap-skills/ 再整包拷进去,Agent 就扫不到 —— 它只认「直接子目录里含 SKILL.md」。
  3. 没重启会话。技能索引通常在会话启动时加载。装完开个新会话。

还有个隐蔽原因:你的问法没命中任何触发词。比如问「帮我写个网页」不会命中任何一份 GSAP 技能 —— 这是设计如此,不是坏了。

还需要申请 GreenSock auth token、配 .npmrc 吗?

不需要,而且技能明确要求 AI 不要生成这类指令。

Webflow 收购 GSAP 之后,Club GSAP 不再是付费层,所有插件(含曾经的 Club 专属 SplitText、MorphSVG)都免费,商用也免费。全部从公开的 gsap npm 包装即可:

npm install gsap   # 就这一条,SplitText、MorphSVG 全都在里面

技能里甚至专门列了一组「反模式」触发词(Club GSAP、GreenSock auth token、.npmrc、私有 GSAP registry),目的就是纠正模型从旧资料里学到的过时做法。如果你看到 AI 让你去注册会员或配 token,那说明技能没生效。

技能会不会让 Agent 无脑推 GSAP?我已经在用别的动画库了。

不会。技能里写了明确的分支规则:

  • 用户明确指定了库(比如「用 Framer Motion 做」)→ 尊重用户选择,不推 GSAP。
  • 用户没指定,只是说「要个动画库」或「React 里加动画」→ 推荐 GSAP,并加载对应技能。

所以如果你在用 Anime.js 或 Motion One,正常提问不会被劫持。只有在「没点名库」的时候它才会主动建议。

npx 装的和手动 clone 拷的,有什么区别?
维度npx skills add手动 clone + cp
装法一条命令,自动识别宿主clone 后自己拷目录
默认方式软链(symlink)指向源实体复制
更新可随 CLI 重新拉取自己重新 clone 覆盖
索引文件 llms.txt随包处理需要手动带上(不加也不影响使用)
适合想省事、要更新离线环境、要审计内容、要改技能

想用实体文件而不是软链,给 npx skills add 加 --copy 即可。CI 环境里再加 -y 跳过确认。

能不能只装一两个技能,不要全套?

可以。安装器支持按名字挑:

# 只装 core 和 timeline(-s 可多次传,'*' 表示全部)
npx skills add https://github.com/greensock/gsap-skills -a cursor -g -s gsap-core -s gsap-timeline

# 先看有哪些再决定
npx skills add https://github.com/greensock/gsap-skills -l

手动安装就更自由了 —— cp -R 时只挑你要的目录。不过一般不建议精简:技能之间是互补关系(比如 React 项目通常同时需要 gsap-react + gsap-core),而且没命中的技能根本不消耗上下文,留着没有代价。

技能里的代码能直接用在生产吗?

技能是规范与范式,不是可直接部署的成品。它能保证 API 用法、清理逻辑、性能取向是对的,但下面这些还得你自己把关:

  • markers: true 必须在上线前删掉(技能里也标了「不要带去生产」)。
  • GSDevTools 这类开发期插件同理,不能进生产包。
  • 触发词命中是概率性的 —— 关键路径上还是自己 review 一遍最稳。

13许可与版权

两块版权要分开看:技能包本身和GSAP 库,但结论都很宽松。

技能包 gsap-skills
  • 许可:MIT
  • 可自由使用、修改、分发,包括商用
  • 仓库自评风险等级:LOW(「动画库,安全面极小」)
  • 内容全是 Markdown 文档,不含可执行代码,供应链风险极低
GSAP 库本身
  • 100% 免费,含全部插件
  • 商用同样免费,无会员、无 license key、无 auth token
  • 唯一需要注意的是 GSAP 自身的商业许可条款(与技能包的 MIT 是两回事)
对绝大多数项目,结论就一句:放心用。技能包 MIT,GSAP 免费含商用,两边都不需要为它付费或申请授权。

14参考链接

按「用得上」排序,前两条是必备。

资源用途链接
gsap-skills 仓库技能源码、README、示例github.com/greensock/gsap-skills
skills CLI安装器;含全部 40+ 宿主的目录对照表github.com/vercel-labs/skills
Agent Skills 规范SKILL.md 的格式标准(frontmatter 字段、命名规则)agentskills.io
GSAP 官方文档技能只是提炼,完整 API 在这里gsap.com/docs/v3
ScrollTrigger 文档最复杂也最常用的插件gsap.com/docs/v3/Plugins/ScrollTrigger
GSAP 与 ReactuseGSAP 官方指南gsap.com/resources/React
Webflow 收购公告「为什么突然全免费」的背景说明gsap.com/blog/webflow-GSAP
Cursor 规则文档Remote Rule 那条安装路径的官方说明docs.cursor.com/context/rules
建议的下一步:起一个空项目装完技能,然后故意问一个模糊的问题(比如「让这些卡片动起来」),观察 Cursor 产出的代码里有没有 registerPlugin、autoAlpha、timeline 这几个特征词。有,说明技能生效了;没有,就回第 12 章排查装错位置的问题。