用途:Motion(包名 motion,原 framer-motion)是 React 声明式动画库,适合实现复杂交互、滚动驱动动画、布局过渡与高级特效。
主要能力:手势支持 drag、hover、tap、pan、focus;滚动动画支持视口触发、滚动联动与视差;布局动画基于 FLIP,支持共享元素过渡;弹簧物理提供自然缓动;SVG 支持路径变形、描边绘制与属性动画;AnimatePresence 处理卸载退场动画;性能上硬件加速,体积从 2.3 KB 到 34 KB 可调。
使用方式:安装可执行 bun add motion,或 npm install motion、yarn add motion。核心组件从 "motion/react" 导入 motion,用 initial、animate、exit、transition、whileHover、whileTap、whileInView、drag、layout 等属性驱动;退场动画用 AnimatePresence 包裹条件渲染,且其本身须保持挂载、子元素需唯一 key;布局动画加 layout 或 layoutId;滚动用 whileInView 或 useScroll 配合 useTransform。体积优化可用 LazyMotion(34 KB 降至 4.6 KB)或 useAnimate mini(2.3 KB)。无障碍可用 MotionConfig reducedMotion="user",键盘交互用 whileFocus。
适用场景:拖拽排序与看板、悬停/点按反馈、视差首屏、滚动显隐、进度条、路由间共享元素过渡、展开折叠、网格/列表切换、SVG 绘制、弹窗与手风琴等。
限制与注意:简单列表动画建议用 auto-animate;静态内容与 3D 动画不适用;Next.js App Router 需加 "use client";Tailwind 的 transition-* 类会冲突需移除;Cloudflare Workers 构建问题可用 framer-motion v12.43.0 替代;50 个以上动画项建议虚拟化。当前版本 12.43.0,具体框架集成与更多模式见随附参考文档与模板。