SuperAPI AI 工具集

motion-react

前端与建站

查看项目

更新于 10-15 20:07

技能介绍

用途:在 React 应用中用 Motion 实现产品级 UI 动画,包括声明式进入/退出、变体编排、布局与共享元素过渡、motion values 与数字滚动、手势状态。也负责判断“是否真的需要 Motion”——许多场景用纯 CSS 或一行 AutoAnimate 更合适。

主要能力:initial/animate/exit 生命周期;transition 支持 tween 与 spring、关键帧数组;whileHover、whileTap、whileFocus、whileDrag、whileInView 等手势状态;variants 父子编排(when、delayChildren: stagger());AnimatePresence 退出动画(mode 为 sync/wait/popLayout);layout 与 layoutId 共享元素;LazyMotion + m 组件按需加载。

使用方式:安装 npm install motion,从 "motion/react" 导入 motion、MotionConfig、AnimatePresence 等。应用根部设置 <MotionConfig reducedMotion="user"> 以尊重系统减少动效偏好。React 18+(peer 范围 ^18.0.0 || ^19.0.0)。RSC 框架需加 "use client" 边界或从 motion/react-client 导入。体积敏感应用可用 LazyMotion + m 组件(初始约 4.6 kB,完整 motion 约 34 kB)。

适用场景:React SPA 的进入/退出与列表动画、页面或视图切换、共享元素移动、动画计数器、手势反馈;迁移 framer-motion 旧代码;接入减少动效支持或审计动画无障碍与性能;在 Motion、CSS/Tailwind 与 AutoAnimate 之间选型。

限制与规则:必须尊重减少动效(WCAG 2.3.3,自动播放超 5 秒动效需暂停控制);只动画 transform 与 opacity,不直接动画 width/height/top/left/margin,展开/折叠高度动画是唯一例外;AnimatePresence 内子元素需稳定唯一 key,数组索引会破坏退出动画;新项目不要引入 framer-motion,也不要混用两个包;动效需有目的,微交互 150–300 ms,路由切换 ≤ 200 ms,视图级过渡 ≤ 400 ms。不适用于 Lottie 动画插画、Remotion 视频渲染或滚动叙事营销页;具体动效设计语言(时长/缓动)属设计系统决策,本技能只提供词汇与约束。测试中可设 MotionGlobalConfig.skipAnimations = true;jsdom 无布局,布局动画与 whileInView 需真实测量,建议 e2e 验证视觉。