基于 Animation Vocabulary 动画术语表,为界面生成动效代码,并自动识别项目中的目标组件文件、读取代码结构、应用动效修改(包括导入、props、包装等),同时处理性能与可访问性约束。使用场景包括 UI 动效设计、原型标注、开发实现、设计验收、提示词优化。
界面动效生成技能
功能概述
界面动效生成技能是一项面向实际任务的技能,主要用于触发场景(何时应该使用本技能);强烈推荐使用的情况(高匹配度) :;
核心要点
- 用户明确说:“帮我给这个按钮/卡片/列表加点击/进入/转场动效,并直接应用到代码里”;
- 当前正在编辑 React/Next.js/TSX 组件文件,需要为 hover、press、mount、scroll reveal、shared element 等交互添加专业动效;
- 项目已使用或计划使用 Framer。
使用与执行
它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
界面动效生成技能
触发场景(何时应该使用本技能)
强烈推荐使用的情况(高匹配度):
- 用户明确说:“帮我给这个按钮/卡片/列表加点击/进入/转场动效,并直接应用到代码里”
- 当前正在编辑 React/Next.js/TSX 组件文件,需要为 hover、press、mount、scroll reveal、shared element 等交互添加专业动效
- 项目已使用或计划使用 Framer Motion + Tailwind,Agent 需要自动安装依赖、修改 import、包装 motion 组件
- 需要把模糊的“加个丝滑动画”翻译成符合 Animation Vocabulary 的精确方案并落地到文件
可以尝试使用的情况:
- Vue/Svelte/HTML 项目,需要生成动效代码(自动应用能力会减弱,需要更多用户确认)
- 仅需要输出高质量动效提示词或 motion spec,不要求自动写入文件
明确不触发 / 不适合使用本技能的情况:
- 用户只想在 Figma、MasterGo、Sketch、图片或设计稿中“画”动效(本技能只操作代码文件)
- 项目是纯静态 HTML、无 package.json、或无法检测前端技术栈
- 需要实现复杂 Canvas/WebGL、Three.js、游戏物理、粒子系统等非 UI 微交互动画
- Monorepo 中需要跨多个子包/仓库修改,或目标文件为构建产物(dist、build、.next)
- 用户只想要“视觉演示”而非真实可维护的代码修改
- 没有明确批准 Dry-run 预览就要求直接修改文件(安全限制,永远不会自动执行)
适用性与限制(重要)
最佳适用环境:
- React 18 + TypeScript + Next.js / Vite
- 已安装或可安装
framer-motion+ Tailwind CSS - 源代码位于
src/components/、app/等标准位置,且文件可读写
支持但效果递减:
- 其他 JS 框架(Vue 3、Svelte)
- 纯 CSS / Vanilla JS 项目(仅生成代码,不自动修改)
- 已有部分动效库的项目(需手动适配)
硬性限制(本技能永远无法做到):
- 修改 Figma / 设计工具中的图层或原型
- 操作非文本文件(图片、视频、Lottie JSON 除非生成代码引用)
- 绕过用户确认直接写入文件(Dry-run + 明确批准是强制流程)
- 保证修改后 100% 无类型错误或运行时问题(仅提供 Dry-run 提示)
- 支持需要运行时数据、复杂状态机、WebSocket 驱动的动画逻辑
使用建议:
- 第一次使用时,先让 Agent 只执行到 Dry-run 阶段,确认无误后再批准写入
- 大型项目建议先在小组件上测试
- 始终保留 Git 提交点,方便回滚
核心方法
始终使用文档定义的 11 类术语、提示词公式和验收清单,避免模糊描述(如“丝滑”“高级”)。
提示词公式
让 对象 在 触发时机 使用 动画模式,从 起始状态 到 结束状态,持续 时长,使用 缓动 / 弹簧参数,并满足 性能与可访问性约束。
11 类术语速查
| 类别 | 关注点 | 典型词汇 |
|---|---|---|
| 进入与退出 | 元素出现/消失 | Fade, Slide, Scale, Pop, Reveal |
| 编排与时序 | 多元素节奏 | Stagger, Delay, Duration, Keyframes, Tween |
| 移动与变换 | 几何变化 | Translate, Scale, Rotate, Skew, Perspective |
| 状态转场 | 状态连接 | Crossfade, Morph, Shared Element, Layout Animation |
| 滚动 | 滚动绑定 | Scroll Reveal, Parallax, View Transition |
| 反馈与交互 | 用户操作回应 | Hover, Press, Drag, Ripple, Shake |
| 缓动 | 速度曲线 | Ease-out, Ease-in-out, Cubic-bezier, Spring |
| 弹簧动画 | 物理参数 | Stiffness, Damping, Mass, Velocity, Interruptible |
| 循环与环境 | 自动播放 | Loop, Pulse, Float, Marquee, Idle |
| 精修与效果 | 细节 polish | Blur, Skeleton, Number Ticker, Line Drawing |
| 性能与原则 | 流畅与意义 | FPS, will-change, Purposeful, Reduced Motion, Spatial Consistency |
动效实现与自动应用流程(核心)
当用户请求为界面添加动效时,遵循以下完整流程:
使用专业术语澄清需求
应用 11 类术语和提示词公式,明确动画模式、触发时机、时长、缓动/弹簧、性能约束。探索项目结构,定位目标组件
使用 Glob、Grep 等工具搜索相关文件,遵循以下优先级规则:- 高优先级:当前在 IDE 中打开或最近查看/编辑的文件
- 中优先级:
src/components/、components/、app/下的文件 - 低优先级:
pages/、根目录下的零散组件 - 搜索策略:先用 Glob 匹配
**/*{Button,Card,List,Modal,Page}*.{tsx,jsx,ts,js},再用 Grep 按组件名精确过滤 - 多候选处理:若找到 2 个以上候选文件,必须先列出文件路径和简要说明,让用户确认目标文件后再继续读取和修改。
确定具体目标元素与修改点
分析需求对应哪个元素(按钮、卡片列表、模态、路由转场等),决定是添加 motion props、包装 motion 组件、还是实现 layout animation。读取目标文件
读取候选文件内容,理解现有结构、导入、样式系统(Tailwind / CSS Modules / styled-components 等)。检测技术栈与依赖
- 读取项目根目录的
package.json,识别包管理器(pnpm / npm / yarn)和已安装动画相关依赖(framer-motion、@react-spring/web、gsap 等)。 - 若缺少必要依赖,在 Dry-run 阶段明确提示安装命令:
- pnpm:
pnpm add framer-motion - npm:
npm install framer-motion - yarn:
yarn add framer-motion
- pnpm:
- 同时检查是否已配置 Tailwind 或其他样式方案。
- 读取项目根目录的
生成适配实现方案
根据检测到的技术栈输出精准代码:- React + Framer Motion:使用
motion.div、whileTap、animate、layout - Tailwind + CSS:添加 transition 类或 @keyframes
- 纯 HTML/JS:添加 style + requestAnimationFrame 或 CSS animation
- 始终优先
transform+opacity
- React + Framer Motion:使用
Dry-run 预览与用户确认(关键安全步骤)
在实际写入文件前,必须输出以下内容供用户确认:- 将要修改的文件完整路径列表
- 每个文件的修改摘要(例如:“添加 import + 将 button 包装为 motion.button + 增加 whileTap”)
- 可能的副作用提示(如类型变化、需要安装依赖)
- 提供两个选项:A. 确认修改并继续;B. 仅生成代码,不写入文件
应用修改到项目文件
仅在用户明确批准后执行:- 精确插入 import(如
import { motion } from 'framer-motion') - 将目标 JSX/HTML 元素替换为 motion 版本或添加动画 props
- 必要时添加 state、事件处理或 layout 属性
- 注入 reduced-motion 逻辑(
@media (prefers-reduced-motion: reduce))
- 精确插入 import(如
运行设计验收清单(见下节)并确认修改。
输出总结:说明使用了哪些术语、修改了哪些文件、为什么这样设计。
设计验收清单(必查)
- 动效是否有明确目的(反馈/引导/解释关系/感知性能)
- 用户能否从动效理解元素来源、去向或状态变化
- 高频操作的动效是否短、轻、克制(< 300ms)
- 是否优先使用 transform 与 opacity,避免 layout thrashing
- 是否尊重 prefers-reduced-motion
- 转场是否保持 spatial consistency
- 弹簧动画是否可打断并自然接续手势
- 动效是否增强任务完成,而非抢夺注意力
输出要求
- 代码示例必须包含 reduced-motion 处理
- 规格说明需包含时长、缓动、触发条件、性能约束
- 提示词需直接可用于 AI 生成工具
- 始终说明“为什么用这个动效”(purposeful)
- 当执行自动应用时,必须先读取目标文件,再提出精确的编辑修改
- 所有动效实现必须包含 reduced-motion 处理(详见 reference.md 第1节)
常见错误与回退处理
- 多候选文件冲突:列出所有候选,让用户选择目标文件。
- 文件只读或权限不足:提示用户手动修改,或生成
.patch文件供用户应用。 - TypeScript 类型错误:在 Dry-run 阶段明确标注可能需要调整的类型定义。
- 缺少依赖:在 Dry-run 阶段给出精确的
pnpm add/npm install命令。 - 用户拒绝写入:立即切换为“仅输出代码 + 修改说明”模式,不再尝试写入。
- 动效导致布局抖动:优先推荐
transform+opacity,避免动画width/height/left/top。
技术栈实现参考
详细的各框架代码模式、Reduced Motion 完整实现、依赖检测清单见 reference.md。
示例 1:按钮按压反馈(自动应用到项目)
输入:为主按钮添加点击 press feedback
流程示例:
- 探索项目 → 发现
src/components/Button.tsx和src/components/PrimaryButton.tsx - 读取目标文件
src/components/Button.tsx - 检测到已使用 Tailwind + Framer Motion
- 应用修改:添加 whileTap + spring transition,并确保 reduced-motion 处理
最终修改结果(已写入文件):
// src/components/Button.tsx
import { motion } from 'framer-motion'
export function Button({ children, ...props }) {
return (
{children}
)
}
使用的术语:Press feedback、Spring、Interruptible、Reduced Motion
示例 2:列表逐项进入(自动应用到项目)
输入:卡片列表进入视口时依次出现
流程示例:
- 搜索
**/*Card*.tsx、**/*List*.tsx - 定位到
src/components/FeatureList.tsx - 读取文件后,使用 scroll reveal + stagger 模式
- 包装每个卡片为 motion.div,添加 viewport trigger 和 stagger
最终修改结果(已写入文件):
// src/components/FeatureList.tsx
import { motion } from 'framer-motion'
const cardVariants = {
hidden: { opacity: 0, y: 12 },
visible: { opacity: 1, y: 0 }
}
{mockData.map((item, index) => (
...
))}
使用的术语:Scroll Reveal、Stagger、Ease-out
示例 3:缩略图转场详情(自动应用到项目)
输入:点击缩略图平滑展开为详情页
流程示例:
- 找到
src/app/gallery/[id]/page.tsx和缩略图组件 - 实现 shared element transition(使用 Framer 的 layout + AnimatePresence 或原生 View Transitions)
- 保持 spatial consistency
最终修改结果(已写入文件):
// 缩略图组件navigateToDetail(id)} /> // 详情页
使用的术语:Shared Element Transition、Layout Animation、Spatial Consistency
参考来源
完整词汇表与判断依据见原 Notion 文档:Animation Vocabulary 动画术语整理
好的 UI 动画不是装饰,而是给变化装上路标:让用户知道发生了什么、从哪里来、要到哪里去。
补充:Reduced Motion 与技术栈检测(方向4+5 强化)
- 所有动效代码必须在 Dry-run 阶段展示 reduced-motion 处理(全局 CSS 或
useReducedMotionhook)。 - 技术栈检测:读取
package.json→ 判断包管理器 → 输出精确安装命令 → 在 reference.md 中查找对应实现模式。
热门AI工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习
最新文章