mcpField
N
nextjs-framer-motion-animations

nextjs-framer-motion-animations

github.com/tristanmanchester设计与 UI4180 次安装7 周前更新
代码仓库

关于 nextjs-framer-motion-animations

这项技能指导开发者在 Next.js 中使用 Motion 实现有明确目的的动画,并检查组件边界、路由行为、无障碍性与验证方式,而非套用通用动画方案。

主要功能

  1. 01检查组件、路由与 Motion 版本
  2. 02按交互和布局选择动画机制
  3. 03依照框架支持处理路由过渡
  4. 04考虑减少动态效果与无障碍性
  5. 05验证浏览器行为及回退方案

适用场景

  1. 01添加局部交互或可见性动画
  2. 02用 variants 协调子元素动画
  3. 03评估 Next.js 应用的路由过渡方式
  4. 04检查动画改动的无障碍性与浏览器行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tristanmanchester/agent-skills --skill nextjs-framer-motion-animations

安装后在 Claude Code 中输入/nextjs-framer-motion-animations确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
evals/
scenarios.json
references/
COMPONENTS.md
ROUTING.md

详细介绍

Next.js 中有目的的动效

选择动效来说明状态或改善交互,而不是给每个页面都增加一层动效。保留现有设计令牌和语义化控件。对于简单的颜色、焦点或悬停过渡,使用 CSS 或许可以避免不必要的客户端 JavaScript。

先检查,再确定边界

阅读实际组件、路由器(App 或 Pages)、package/lockfiles、已安装的 Motion API 和构建配置。确定由谁负责挂载、状态、焦点、滚动和导航。区分局部显示与路由过渡。文件名或令牌扫描器无法证明这些关系或构建兼容性。

对于现代化改造或新编写的 Motion 代码,使用 motion/react。在 Server Component 中,受支持的 motion/react-client 入口会提供 motion 元素;它不会让 hooks 或任意回调变得可在服务端安全使用。将交互逻辑和 hooks 放在尽可能小的 Client Component 中,同时让数据获取和机密留在服务端。服务端渲染的子元素可以通过客户端包装器传递,而无需将其实现移入客户端包。跨越该边界的 props 必须符合 React 实际的序列化约定。

对于现有的 framer-motion 项目,检查其已安装版本,并决定是否将迁移纳入范围。有计划的迁移应一并更新 package、imports、lockfile、tests 以及任何发生变化的 API。不要混用运行时,也不要通过机械替换,将来自 motion/react-m 的命名空间导入改写为其他模块。此技能不附带兼容分支或自动导入改写功能。

选择实现方式

需求从这里开始必要条件
简单的局部补间动画/手势motion element保留语义化元素以及禁用/焦点行为
多个协同的子元素variants 和 stagger身份稳定,延迟总时长有上限
局部移除AnimatePresence它能在带 key 的子元素移除后继续存在并观察该元素
布局变化layout / layout="position"测量正确且身份得以保留
活动树中的共享元素layoutId / LayoutGroupID 唯一且作用范围明确
可见性显示whileInView滚动根节点正确,且可渐进显示
与滚动关联的值useScroll 加 motion values目标/容器正确,且制定减少动效策略
命令式序列useAnimate目标范围明确,并能取消/清理
对包体积敏感的区域LazyMotion 和 m功能集涵盖所用的布局/拖拽 API
路由/共享视图过渡框架支持的 ViewTransition符合实际的 Next/React/浏览器约定,而不是路径名包装器

请阅读组件模式,了解实现决策;阅读路由器集成,了解路由变化。不要假定整个包只需一个 provider,或每种交互都适合相同的动画时长。

Presence 与应用状态

要让自身退出动画生效,AnimatePresence 必须持续存在;但要控制由路由器管理的子树,仅靠它并不足够。按路径名给包装器设置 key,并不能保证离开的路由内容会原样保留。不要冻结私有路由器上下文、拦截所有点击,或延迟所有导航来让退出动画演示正常运行。请使用受支持的框架路由机制,或如实实现仅增强进入效果。

动画回调不是事务边界。不要让付款、删除、导航确认或其他应用结果取决于动画是否恰好完成。取消、中断、重新挂载和减少动效都必须保留相同的逻辑结果。

无障碍与渲染

在适合现有组件树的位置使用 MotionConfig reducedMotion="user",并针对滚动、自动播放和定制效果,在局部使用 useReducedMotion 做出决策。仅透明度动画以及独立的 CSS/视图过渡路径需要各自的策略;一个 Motion 提供器并不能统一控制所有动画。

使用真正的按钮/链接/对话框。保留键盘操作路径、可见的焦点、符合逻辑的阅读顺序,以及拖动操作的等效替代方式。退出时已不可见的控件不得继续获得焦点或拦截输入。视觉上的模态框外壳并不等于焦点管理、Escape 键行为、标签或背景惰性处理。

不要在服务端渲染时让关键文本一直不可见,并依赖成功的水合/交叉观察器来显示文本。在必要时保持布局框稳定,并处理字体/图片加载、视口变化,以及无 JavaScript/失败时的行为。适合时使用变换/透明度,但在声称性能有所提升前,先衡量实际的绘制、布局、合成和包体成本。

验证实际改动

在获得授权的情况下,运行项目现有的类型检查/lint/构建流程;不要假设其脚本名称是 npm run lint/build。在浏览器中测试快速交互、前进/后退导航、缓慢的数据加载、中断、减少动态效果设置、键盘操作,以及共享布局组件的多个副本。检查控制台/水合错误、滚动位置恢复、焦点和可用的非动画回退方案。单元测试模拟并不能替代浏览器性能或路由器生命周期测试。

交付补丁、所选边界/机制、实际验证结果以及尚需进行的浏览器检查。旧的通用扫描器、生成的计划、全资源脚手架及其黄金输出包均已移除;目标是提供真实的集成证据,而非复现某种启发式方法偏好的输出。

资料来源与维护

审核日期:2026-09-13:Motion 安装、AnimatePresence、Next 模板和 Next 视图过渡。 评估用例描述了必需的检查项,并非已运行的测试。

评论

支持 Markdown