用途
ui-motion 用于把命名化的 StyleSeed 动效应用到 React 组件上。当需要给某个组件套用动效时调用:既可以是 5 种人格种子之一(Spring/Silk/Snap/Float/Pulse 与 entrance/exit/hover/press/layout 的组合),也可以是动效库中具名的关键词动作(toggle-flip、toggle-curtain、reveal-blur、pop-in、shimmer 等)。
主要能力
1. 感觉词到种子的映射
技能会先把用户的描述翻译成 5 种种子之一:
- Spring:bouncy、springy、playful、energetic、alive
- Silk:smooth、silky、fluid、elegant、composed、continuous
- Snap:snappy、quick、instant、decisive、sharp、precise
- Float:floaty、gentle、weightless、dreamy、ambient、drifting
- Pulse:rhythmic、punchy、pulsing、heartbeat、beat
品牌名也可映射:Toss/Arc → Spring,Stripe/Notion → Silk,Linear/Raycast/Vercel → Snap。若用户只给品牌名,使用该品牌的默认种子;若用户明确指定种子名,则照用。
2. 用例到动效的推荐
当用户描述的是场景而非感觉时,从用例映射中推荐,例如:主按钮/CTA 按压 → spring·press;模态框/对话框/抽屉进入 → silk·entrance;下拉/弹出层/菜单 → snap·entrance;Toast/内联通知 → spring·entrance;列表/信息流项出现 → stagger-cascade;营销卡片悬停 → tilt-3d;仪表盘/数据卡片悬停 → snap·hover;点赞/收藏/反应 → like-burst;直播/在线/录制圆点 → pulse-beat;加载/骨架屏 → shimmer;成功/确认 → pop-in;开关/标签/分段切换 → toggle-flip;页面/路由过渡 → silk·entrance;数字/余额/KPI/价格展示 → 不做动效。
存在两条覆盖规则的铁律:一个产品只用一种种子;绝不延迟有效载荷(余额、价格、搜索结果不做进入动画)。
3. 具名动效关键词
种子决定人格,动效库提供辨识度更高的具体动作,包括:toggle-flip(3D Y 轴卡片翻转)、toggle-slide(滑出滑入切换)、toggle-morph(胶囊⇄圆形形变)、toggle-curtain(自上而下 clip-path 擦除)、reveal-blur(模糊 12px→0 聚焦)、reveal-rise(遮罩文字上浮)、reveal-unfold(自顶边 scaleY 展开)、pop-in(从 0 弹入过冲)、press-squish(缩小+倾斜)、tap-ripple(点击径向波纹)、pulse-beat(循环缩放脉冲)、wiggle(水平抖动,用于错误提示)、shimmer(骨架加载扫光)、stagger-cascade(子项依次上浮)。
使用方式
- 读取目标文件(未给路径则先询问),定位相关 JSX 元素。
- 确认导入路径:从 "framer-motion" 导入 motion(退出动画还需 AnimatePresence),从 "@engine/motion" 导入所选种子(无 @engine/* 别名时用相对路径)。
- 把目标标签替换为 <motion.X> 并展开种子配方,例如: <motion.button {...spring.hover}>Save</motion.button> <motion.button {...spring.press} {...spring.hover}>Save</motion.button> <motion.div {...silk.entrance}>...</motion.div> 退出需外层 <AnimatePresence>;布局用 <motion.div {...snap.layout}>。 不要内联参数,始终展开配方。
- 长时间运行的界面中尊重 prefers-reduced-motion:对挂载/退出/布局序列导入 usePrefersReducedMotion 与 REDUCED_TRANSITION 并覆盖 transition。
- 重新读取文件,确认 JSX 仍可解析(括号匹配、motion 标签闭合、退出时 AnimatePresence 就位)。
- 告知用户所应用的种子与场景,并建议一个可能需要的相关场景。
应用关键词时:从动效库读取精确配方并原样复制片段,仅把元素/内容适配到用户 JSX,保留 transition 值;有状态的关键词(切换、波纹)按片段接入 useState;一次性揭示可用 key 变化重放。告知用户所用关键词,并提示可在 /motion 预览/复制其他动效。若用户描述的动效没有精确关键词,退回种子+场景;若说出不存在的关键词,给出最接近的真实关键词,不虚构。
适用场景与限制
适用:React 项目中基于 framer-motion 的组件动效落地,包含按钮、模态、菜单、Toast、列表、切换控件、加载态、成功反馈、页面过渡等。
不适用:查阅 framer-motion 通用文档或学习;非 React 动效(纯 CSS 过渡、GSAP);滚动联动时间线或视差(超出范围);调整已有的 FadeIn/FadeUp/Stagger 封装(应直接编辑 engine/components/ui/motion.tsx)。
其他限制:只有 5 个种子,不得虚构种子名;不得编辑 engine/motion/seeds/*.ts;不得引入第三方动画库(gsap、anime.js);不得添加滚动联动、视差或无限动画。该技能仅在上游来源与本地项目上下文明确匹配时使用;应用改动前需自行验证命令、生成代码、依赖、凭据与外部服务行为,示例不能替代环境相关测试、安全审查或对破坏性/高成本操作的用户批准。
关于收费、价格、平台支持等信息,资料中暂未提供。