本文目录导读:

设计稿中的过渡动画,选择缓动函数(Easing Function)的核心原则是:让动画符合物理直觉,提升用户感知的流畅度与自然度。
没有“万能”的缓动函数,但有一套经验法则,你可以根据动效的属性和意图来选择:
第一步:快速记忆“黄金三法则”
如果你记不住复杂的曲线,先记住这三条,能解决 80% 的界面过渡问题:
-
进入(元素出现):用
ease-out(先快后慢)- 为什么? 模拟物体从静止到运动的惯性,用户希望快速看到新内容,然后自然地减速停稳。
- 示例:弹窗出现、卡片浮入、 sidebar 滑入。
-
退出(元素消失):用
ease-in(先慢后快)- 为什么? 模拟物体离开视线的加速感,用户已经注意到了,让它快速离开,不拖沓。
- 示例:弹窗关闭、删除卡片、提示消失。
-
移动/状态变换(A点到B点):用
ease-in-out(两头慢,中间快)- 为什么? 模拟流畅的物理运动(如电梯起停),避免突兀的启动和停止。
- 示例:开关滑块、列表拖拽、页面切换(如左滑右滑)。
第二步:根据动效意图精细选择
| 动效意图 | 推荐缓动函数 | 效果说明 | 设计稿场景示例 |
|---|---|---|---|
| 物体进入 (进来) | ease-out / cubic-bezier(0, 0, 0.58, 1) |
快速开始,优雅结束,清新、不突兀。 | ① 通知栏从顶部滑入 ② 图片懒加载显示 ③ modal 从屏幕底部向上弹出 |
| 物体退出 (离开) | ease-in / cubic-bezier(0.42, 0, 1, 1) |
缓慢开始,加速消失,果断、不迟疑。 | ① Toast 通知消失 ② 删除一个列表项 ③ 关闭弹窗时内容缩小并淡出 |
| 状态切换 (平移/旋转) | ease-in-out / cubic-bezier(0.42, 0, 0.58, 1) |
温柔启动,中间顺畅,温柔停止,最“通用”。 | ① 汉堡菜单展开/收起 ② Toggle 开关滑动 ③ 卡片展开详情 |
| 强调/反馈 (点击/悬停) | ease-out / cubic-bezier(0.25, 0.1, 0.25, 1) |
快速响应,稍微反弹,模拟物理弹性。 | ① 按钮点击下沉 ② 图标 hover 放大 ③ 点赞爱心爆炸 |
| 大层级切换 (页面转场) | ease-in-out 或 自定义 cubic-bezier |
需要更明显的叙事感。ease-in-out 平滑过渡。 |
① 页面从左向右滑动 ② Tab 切换 ③ Banner 自动轮播 |
| 弹性/个性 | cubic-bezier(0.68, -0.55, 0.27, 1.55) (弹性) |
超过终点再回弹,增加趣味性,但不要滥用。 | ① 加载完成时的对勾图标 ② 收藏按钮的星星 ③ 游戏化进度条 |
第三步:掌握“魔幻曲线” cubic-bezier
在Figma、Sketch、Web代码中,最精确的控制是通过 cubic-bezier(p1x, p1y, p2x, p2y) 自定义曲线。
-
避开几个常见误区:
- 滥用
ease-in进入: 会让元素显得像被人推了一把,缓慢启动很“笨重”。 - 滥用
ease-out退出: 会让元素消失很拖沓,用户等待烦躁。 - 全程
linear(线性): 看起来像机器,没有生机感,除了特定效果(如进度条加载、颜色渐变),尽量避免。
- 滥用
-
设计师的“偷懒”工具:
- Google “easing function cheat sheet”: 有很多可视化图表,可以直接抄预设值。
- 使用 Figma 的 Smart Animate + 交互原型: 在Figma中直接设置缓动函数并预览,这是最直观的方法。
- 工具网站:
cubic-bezier.com或easings.net。
-
如何向开发交接?
- 直接输出预设值: “进入用 ease-out, 时长300ms”。
- 输出 CSS 参数: “
transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1)”。 - 使用 Lottie 或 Rive: 如果是复杂路径动画(如弹性、跟随),导出动画文件,效果最保真。
第四步:一个简单的决策流程图
请从这一步开始:
1. 这个动画是【进入】还是【退出】?
├── 进入 → 走到 2
└── 退出 → 走到 3
2. 进入:
├── 是【主要元素】出现? → 用 ease-out (先快后慢)
└── 是【装饰/次要】出现? → 用 ease-out (或者稍微慢一点的 ease-out)
3. 退出:
├── 用户希望它【马上消失】? → 用 ease-in (先慢后快) 或甚至 linear
└── 是【温和的淡化】? → 用 ease-in-out
4. 【状态变化】(移动/缩放/颜色变化):
├── 是【平滑的过渡】? → 用 ease-in-out
├── 是【点击反馈】? → 用 ease-out 或 微弹性 (如 cubic-bezier(0.34, 1.56, 0.64, 1))
└── 是【拖拽/跟随手指】? → 用 阻尼效果 (如 Spring 物理引擎,或自定义 ease-out)
5. 特殊用途:
├── 【渐隐/渐显透明度】? → 用 ease-in-out 或 linear (取决于速度)
├── 【旋转】? → 用 ease-in-out
└── 【路径动画】(沿着曲线移动)? → 用 ease-in-out 或 自定义跟随曲线
给设计师的直接建议
- 新人/快速原型: 所有动画一律用
ease-in-out(时长 200-300ms),确保不翻车。 - 追求自然感: 进入用
ease-out,退出用ease-in。 - 需要个性/高级感: 打开
cubic-bezier.com,自己拉曲线(P1 在 0.1-0.3 之间,P2 在 0.7-0.9 之间,尝试带一点弹性)。 - 测试至关重要: 在真实设备上(而非设计稿预览)看动画效果,设计稿的 300ms 在手机上可能过快或过慢。
- 统一性: 整个产品里尽量使用同一套缓动函数库(Ant Design 或 Material Design 的动画 token),保持品牌体验一致。
标签: 过渡动画
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。