Communitygithub.com

rbrown101010/codex-marketing-skills

GSAP 动画参考,专为 HyperFrames 设计。涵盖 gsap.to()、from()、fromTo()、缓动函数、交错、默认值、时间线(gsap.timeline()、位置参数、标签、嵌套、播放控制)以及性能优化(变换、will-change、quickTo)。在编写 HyperFrames 合成中的 GSAP 动画时使用。

codex-marketing-skills 是什么?

此技能为在 HyperFrames 环境中使用 GSAP(GreenSock 动画平台)编写高性能动画的开发者提供全面参考。它涵盖了所有核心补间方法,包括 gsap.to()、gsap.from() 和 gsap.fromTo(),并详细介绍了常用属性,如持续时间、延迟、缓动函数和交错效果。该文档特别强调了 GSAP 的变换别名(如 x、y、scale 和 rotation),推荐使用它们替代原始的 transform 字符串以获得更好的性能。此外,还深入探讨了时间线的使用,包括如何创建时间线、使用位置参数精确控制动画排序、添加标签以及嵌套时间线。为了优化性能,技能文档建议优先动画化 transform 和 opacity 属性,使用 will-change CSS 属性,并利用 gsap.quickTo() 处理高频更新事件,例如鼠标移动。它还提供了关于 gsap.matchMedia() 用于响应式设计和可访问性的指南,以及清理未使用动画以避免内存泄漏的最佳实践。通过遵循这些指导原则,开发者可以在 HyperFrames 项目中创建流畅、高效且可维护的动画。

兼容平台~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/rbrown101010/codex-marketing-skills/tree/HEAD/plugin-workflows/hyperframes-gsap

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

GSAP

核心补间方法

  • gsap.to(targets, vars) — 从当前状态动画到 vars。最常用。
  • gsap.from(targets, vars) — 从 vars 动画到当前状态(入场效果)。
  • gsap.fromTo(targets, fromVars, toVars) — 明确的起始和结束状态。
  • gsap.set(targets, vars) — 立即应用(持续时间为 0)。

始终使用驼峰式属性名称(例如 backgroundColor、rotationX)。

常用 vars

  • duration — 秒(默认为 0.5)。
  • delay — 开始前的延迟秒数。
  • ease — "power1.out"(默认)、"power3.inOut"、"back.out(1.7)"、"elastic.out(1, 0.3)"、"none"。
  • stagger — 数字 0.1 或对象:{ amount: 0.3, from: "center" }、{ each: 0.1, from: "random" }。
  • overwrite — false(默认)、true 或 "auto"。
  • repeat — 数字或 -1 表示无限循环。yoyo — 与 repeat 配合使用,交替动画方向。
  • onComplete、onStart、onUpdate — 回调函数。
  • immediateRender — 对于 from()/fromTo() 默认为 true。在后续针对相同属性和元素的补间上设置为 false 以避免覆盖。

变换和 CSS

优先使用 GSAP 的变换别名而非原始的 transform 字符串:

GSAP 属性等效属性
x、y、ztranslateX/Y/Z (px)
xPercent、yPercenttranslateX/Y (百分比)
scale、scaleX、scaleYscale
rotationrotate (度)
rotationX、rotationY3D rotate
skewX、skewYskew
transformOrigintransform-origin
  • autoAlpha — 优先于 opacity。当值为 0 时:同时设置 visibility: hidden。
  • CSS 变量 — "--hue": 180。
  • svgOrigin (仅 SVG) — 全局 SVG 坐标空间原点。不要与 transformOrigin 结合使用。
  • 定向旋转 — "360_cw"、"-170_short"、"90_ccw"。
  • clearProps — "all" 或逗号分隔;完成时移除内联样式。
  • 相对值 — "+=20"、"-=10"、"*=2"。

基于函数的值

gsap.to(".item", {
  x: (i, target, targets) => i * 50,
  stagger: 0.1,
});

缓动函数

内置缓动函数:power1–power4、back、bounce、circ、elastic、expo、sine。每个都有 .in、.out、.inOut。

默认值

gsap.defaults({ duration: 0.6, ease: "power2.out" });

控制补间

const tween = gsap.to(".box", { x: 100 });
tween.pause();
tween.play();
tween.reverse();
tween.kill();
tween.progress(0.5);
tween.time(0.2);

gsap.matchMedia()(响应式 + 无障碍)

仅当媒体查询匹配时运行设置;当匹配停止时自动恢复。

let mm = gsap.matchMedia();
mm.add(
  {
    isDesktop: "(min-width: 800px)",
    reduceMotion: "(prefers-reduced-motion: reduce)",
  },
  (context) => {
    const { isDesktop, reduceMotion } = context.conditions;
    gsap.to(".box", {
      rotation: isDesktop ? 360 : 180,
      duration: reduceMotion ? 0 : 2,
    });
  },
);

时间线

创建时间线

const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } });
tl.to(".a", { x: 100 }).to(".b", { y: 50 }).to(".c", { opacity: 0 });

位置参数

第三个参数控制放置位置:

  • 绝对位置:1 — 在第 1 秒
  • 相对位置:"+=0.5" — 结束后;"-=0.2" — 结束前
  • 标签:"intro"、"intro+=0.3"
  • 对齐:"<" — 与上一个同时开始;">" — 上一个结束后开始;"<0.2" — 上一个开始后 0.2 秒
tl.to(".a", { x: 100 }, 0);
tl.to(".b", { y: 50 }, "<"); // 与 .a 同时开始
tl.to(".c", { opacity: 0 }, "<0.2"); // .b 开始后 0.2 秒

标签

tl.addLabel("intro", 0);
tl.to(".a", { x: 100 }, "intro");
tl.addLabel("outro", "+=0.5");
tl.play("outro");
tl.tweenFromTo("intro", "outro");

时间线选项

  • paused: true — 创建时暂停;调用 .play() 启动。
  • repeat、yoyo — 应用于整个时间线。
  • defaults — 合并到每个子补间中的变量。

嵌套时间线

const master = gsap.timeline();
const child = gsap.timeline();
child.to(".a", { x: 100 }).to(".b", { y: 50 });
master.add(child, 0);

播放控制

tl.play()、tl.pause()、tl.reverse()、tl.restart()、tl.time(2)、tl.progress(0.5)、tl.kill()。


性能

优先使用变换和不透明度

动画化 x、y、scale、rotation、opacity 保持在合成器上。当变换可以实现相同效果时,避免使用 width、height、top、left。

will-change

will-change: transform;

仅应用于实际动画化元素。

gsap.quickTo() 用于频繁更新

let xTo = gsap.quickTo("#id", "x", { duration: 0.4, ease: "power3" }),
  yTo = gsap.quickTo("#id", "y", { duration: 0.4, ease: "power3" });
container.addEventListener("mousemove", (e) => {
  xTo(e.pageX);
  yTo(e.pageY);
});

交错优于多个补间

使用 stagger 替代带有手动延迟的单独补间。

清理

暂停或停止屏幕外的动画。


参考资料(按需加载)

  • references/effects.md — 即用效果:打字机文本、音频可视化。在需要为 HyperFrames 寻找现成效果模式时阅读。

最佳实践

  • 使用驼峰式属性名称;优先使用变换别名和 autoAlpha。
  • 优先使用时间线而不是通过 delay 链接动画;使用位置参数。
  • 使用 addLabel() 添加标签以便于阅读的序列。
  • 将默认值传递给时间线构造函数。
  • 存储补间/时间线的返回值以便控制播放。

不要做的

  • 当变换足够时,避免动画化布局属性(width/height/top/left)。
  • 在同一 SVG 元素上同时使用 svgOrigin 和 transformOrigin。
  • 使用 delay 链接动画,而时间线可以更好地排序。
  • 在 DOM 存在之前创建补间。
  • 跳过清理 — 始终在不再需要时终止补间。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能