Communitygithub.com

ElvinEga/skills

为网站和着陆页构建基于滚动触发和滚动驱动的动画,支持 React + Framer Motion(或针对非 React 站点的轻量级 JOS 库)。涵盖粘性滚动堆栈、多层视差、沉浸式 Apple 风格缩放英雄区、画廊和产品图片缩放、3D 图像分割/碎片揭示、圆形/轨道/径向/螺旋运动、扩展/钟形曲线卡片以及 Canvas 或视频滚动叙事的图像序列。

skills 是什么?

该技能为 AI 驱动的开发工具(如 Claude Code、Cursor、Codex)设计,用于在 React 项目(使用 Framer Motion)或任意网页(使用轻量级 JOS 库)上生成滚动动画。它提供了十种经过实战检验的动画模式,包括粘性卡片堆栈(经典、Chronos 电影式后退、3D 倾斜、多层、水平)、多层视差效果、Apple 风格的沉浸式缩放英雄区、图片缩放、3D 图像分割/碎片揭示、圆形/轨道动画、钟形曲线扩展卡片以及基于 Canvas 或视频的滚动图像序列。此技能通过一个清晰的决策树智能地选择最佳模式:对于模糊的请求(如“让这个部分在滚动时更有活力”),它会选择最接近的匹配(例如,英雄区用“insane-parallax”或“immersive-scroll-zoom”),并在必要时请求澄清。所有代码都遵循一个共享的 Framer Motion 心智模型,使用 useScroll、useTransform 和 useSpring 实现流畅的物理驱动动画,并包含跨模式规则,如弹簧默认值(阻尼 20–30、刚度 150–300、质量 0.5–0.8)、willChange 优化、z-index 数学运算(堆叠时使用 total - index),以及通过减少层数和缩放范围来针对移动端进行适当简化。在需要时,这些模式可以无缝组合(例如,一个着陆页可以为英雄区使用视差,为特点区域使用滚动堆栈,为其他部分使用 JOS 淡入效果),而无需重复代码。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ElvinEga/skills/tree/HEAD/skills/animation/scroll-animation

在你喜欢的 AI 中提问

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

文档

滚动动画

一套包含十种滚动动画模式的路由方案。除 JOS 模式外,所有模式均基于相同的 React + Framer Motion 原语构建 —— useScroll + useTransform(以及用于平滑处理的 useSpring)。因此,请先阅读本文档,了解共享心理模型,然后仅加载与用户需求匹配的参考文件。

共享心理模型(Framer Motion 模式)

本技能中的几乎所有效果都遵循相同的骨架:

import { motion, useScroll, useSpring, useTransform } from "framer-motion";
import { useRef } from "react";

const containerRef = useRef<HTMLDivElement>(null);

const { scrollYProgress } = useScroll({
  target: containerRef,
  offset: ["start start", "end end"],
});

const smoothProgress = useSpring(scrollYProgress, {
  damping: 25,     // 20–30:值越高,弹跳越少
  stiffness: 200,  // 150–300:值越高,响应越快
  mass: 0.5,       // 0.5–0.8:值越低,越轻/越快
});

const someValue = useTransform(smoothProgress, [0, 1], [startVal, endVal]);
  • 容器高度控制速度/戏剧效果。vh 值越大 = 滚动越慢,越具电影感。典型范围:150vh(快速)到 400vh(舒缓)。
  • position: sticky; top: 0 将内容固定到视口,同时高的容器提供滚动空间以进行动画过渡。
  • 始终将原始的 scrollYProgress 包装在 useSpring 中 —— 否则,运动会感觉机械/线性,缺乏物理感。
  • 多元素效果(堆叠、网格、轨道)为每个元素提供一个窗口:start = index / total,end = start + 1 / total,然后将 [start, end](或用于中间峰值效果的5点钟形曲线)映射到该元素的变换。
  • 尊重 prefers-reduced-motion:对于有需求的用户,回退到静态布局或简单的淡入效果。

选择模式 —— 选择指南

阅读 references/ 中匹配的参考文件,以获取完整的组件代码、变体、关键规则和故障排除表。不要凭记忆猜测变换值 —— 参考文件包含经过调优且可用的数值。

用户要求...阅读此参考文件
卡片在滚动时堆叠/粘附、通用“堆叠卡片”、3D 倾斜堆叠、多层堆叠、水平卡片堆叠references/scroll-stack.md
特指“Chronos 风格”堆叠、带有强烈电影感的卡片后退效果(伴随阴影/半径增长)references/chronos-scroll-stack.md
多速度深度层、背景/前景以不同速度移动、“疯狂”/戏剧性的视差效果、浮动装饰形状references/insane-parallax.md
苹果风格的主角缩放至图片、焦点拉近模糊、图片缩放上叠加文字揭示效果、电影级产品发布缩放references/immersive-scroll-zoom.md
画廊图片在进入视口时放大、产品焦点缩放、带有滚动驱动缩放的图片网格references/image-zoom-scrolling.md
图片分裂成两半/四部分并分离、对角碎裂、代理/作品集风格揭示效果(带3D倾斜)references/image-split-3d.md
轨道元素、圆形进度环、径向/螺旋画廊、文字沿圆形路径运动references/circular-scroll.md
卡片/磁贴在激活时放大/缩放、钟形曲线网格扩展、瀑布流点击展开references/expanding-cards-scroll.md
逐帧擦除、“翻书”滚动、画布图片序列、与滚动位置绑定的产品展示视频references/scroll-image-sequences.md
简单的淡入/滑动/放大显示、交错显示、不使用 React/Framer Motion、或明确要求“JOS”references/jos-animation.md

如果请求模棱两可或可能适合多种模式(例如,“让主角部分在滚动时更具动感”),对于主角部分,优先选择 insane-parallax.md 或 immersive-scroll-zoom.md,并且仅在不清楚时询问 —— 否则,选择最接近的匹配并注明假设。

跨领域规则(适用于所有模式)

  • 仅限 Framer Motion 用于除 JOS 之外的所有模式 —— 没有 GSAP,没有原生滚动监听代码,除非用户明确要求非 Framer Motion 实现。
  • 几乎通用的弹簧默认值:damping: 20–30,stiffness: 150–300,mass: 0.5–0.8。每个参考文件都会给出该模式的确切调优值 —— 如果有差异,请使用这些值覆盖通用默认值。
  • 在动画元素上设置 willChange: "transform, opacity",以保持在合成器线程上运行。
  • 堆叠内容的 z-index 计算:通常使用 total - index,使较早的元素在后退时仍位于顶部。
  • 不要过度动画化。3–8 张卡片/帧/层通常是理想数量;更多会增加疲劳感或影响移动端性能。
  • 移动端:软化缩放范围,减少层/帧数,并在非必要的滚动驱动序列中优先使用 whileInView。

组合模式

这些模式可以组合。一个登录页面可能使用 insane-parallax 处理主角部分,scroll-stack 处理功能部分,以及 jos-animation 处理同一页面其他位置的简单交错淡入效果。请独立阅读每个相关的参考文件 —— 它们之间没有依赖关系(除非特别注明,例如 scroll-stack.md 指向 chronos-scroll-stack.md 以获取完整的电影感变体)。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能