SuperAPI AI 工具集

mobile-motion-patterns

设计与创作

查看项目

更新于 10-15 16:42

技能介绍

用途:为 Agenta 移动端(web/mobile)应用提供统一的动效设计规则,规范何时动画、如何使用共享预设,以及减少动效(reduced motion)的强制要求。

主要能力与结构:JS 驱动的动画通过 motion 包与共享预设模块 src/lib/motion/presets.ts 实现,组件不自行定义时长、缓动或弹簧参数。预设通过 hook 使用(具备 reduced-motion 感知,且为强制方式):

import {AnimatePresence, motion} from "motion/react" import {useMotionPresets} from "@/lib/motion/presets" const presets = useMotionPresets()

当前实际使用的预设:crossfade,是组件唯一消费的预设,用于回复展示(features/chat/AnswerReveal.tsx)和输入框的选择器与录音浮层(features/chat/Composer.tsx)。骨架屏到内容切换时,两者几何尺寸必须一致,以保证淡入淡出不产生布局偏移。

已定义但尚未被任何界面使用:sharedAxisPush(水平父到子推进,custom={1} 前进、custom={-1} 后退,配合 <AnimatePresence custom={direction} initial={false}>);sheetSlideUp(自定义底部弹层的弹簧式上滑)。另有原始值 pushTransition、sheetTransition、crossfadeTransition 及 reduced 标志。

使用规则:导航、容器包含与状态切换才做动画,不做装饰性动画;不做吸引注意的动效;只动画 transform/opacity,不触发布局。减少动效不是可选项,useMotionPresets() 在设置 prefers-reduced-motion 时返回即时变体与零时长过渡;预设模块之外的动画必须在评审中说明理由并自行处理减少动效;CSS 关键帧动画需在 globals.css 加 @media (prefers-reduced-motion: reduce) 覆盖(参见 .animate-composer-ring)。消息进入/流式:回复通过 crossfade 淡入,文字流式不做逐字动画。新的共享模式应加入 presets.ts(一个导出预设加文档注释,及在 useMotionPresets 中的 reduced 变体),而非写入组件文件。

限制:页面导航目前无过渡;弹层与抽屉(@agenta/ui/ui 的 Sheet 或本地 src/components/ui/sheet.tsx)使用自身 Tailwind animate-in/slide-in-* 类,而非 motion。该资料未提供安装命令、平台范围与收费信息。