用途:Motion(包名 motion,原 framer-motion)是面向 React 的声明式动画库,用于实现手势交互、滚动动画、布局过渡与 SVG 动画。
主要能力:支持 drag、hover、tap、pan、focus 等手势;whileInView 视口触发与 useScroll 滚动联动、视差;基于 FLIP 的布局动画与 layoutId 共享元素过渡;弹簧物理缓动;SVG 路径变形与描边动画;AnimatePresence 退出动画;硬件加速与 ScrollTimeline。体积可选:完整组件约 34 KB,LazyMotion + m 约 4.6 KB,useAnimate mini 约 2.3 KB。
使用方式:安装 pnpm add motion(或 npm install motion / yarn add motion),从 motion/react 导入 motion、AnimatePresence、useScroll、useTransform、MotionConfig 等。Next.js App Router 需在客户端组件中使用,可用 motion/react-client 包装。Tailwind 集成时移除 Tailwind transition 以免冲突。
适用场景:拖拽排序、悬停/点击反馈、滚动揭示、进度条、共享元素路由过渡、展开折叠、标签下划线、模态框、SVG 动画等。
限制:简单列表增删建议用 auto-animate;Cloudflare Workers 存在构建兼容问题(GitHub issue #2918),可改用 framer-motion v12.23.24;3D 动画应使用 Three.js 等专用库;reducedMotion 对 AnimatePresence 不生效(issue #1567);大列表需配合虚拟化。当前版本 12.23.24(2025-11-07 验证),需 React 18+ 或 19+,内置 TypeScript 支持。