2、动效基础理论:动画的12项基本原则

聊动画之前,我想先问一个问题:为什么有些车机界面动起来特别舒服,有些却让人想砸屏幕?

答案其实就藏在迪士尼动画师们总结的12项基本原则里。这些原则本来是给卡通片用的,但放到车机界面上,效果出奇的好。我做了这么多年UI,发现真正懂动效的设计师,基本都把这套东西吃透了。

2.1 缓动(Easing)—— 动效的灵魂

缓动是什么?说白了就是让运动有「加速度」和「减速度」。没有缓动的动画,就像机器人走路——生硬、机械、毫无生气。

举个例子:一个按钮从A点移到B点。如果全程匀速,你会觉得它「飘」过去了。但如果你让它先加速再减速,嗯,感觉就对了——就像真实世界里的物体运动。

核心要点:缓动曲线决定了动画的「性格」。

  • ease-in:慢开始,快结束。适合元素离开屏幕。
  • ease-out:快开始,慢结束。适合元素进入屏幕。
  • ease-in-out:两头慢,中间快。适合来回移动。

我在项目中遇到过一个问题:导航卡片弹出时用了ease-in,结果用户总觉得「卡了一下」。后来换成ease-out,反馈立刻好了。你想想看,卡片是「出现」而不是「消失」,当然应该快进慢出。

2.2 挤压与拉伸(Squash & Stretch)—— 赋予生命力

这个原则来自橡皮管动画。一个球落地,会压扁一点,弹起来时又会拉长。车机界面上怎么用?

比如点击一个图标,让它稍微压扁再弹回原状。就这么一个微小的变形,用户会觉得这个界面是「活」的。

我的经验:挤压拉伸的量不要超过原始尺寸的10%。车机不是卡通片,太夸张反而显得廉价。

我曾经在一个音乐播放器项目里,把专辑封面的点击反馈做成了挤压效果。测试时用户说:「这个按钮好像有弹性。」——这就是我们要的效果。

2.3 预备动作(Anticipation)—— 让用户有心理准备

预备动作就是「先往后蓄力,再往前冲」。车机上最常见的例子:下拉刷新时,列表先往上弹一下,再开始刷新。

为什么需要这个?因为人的大脑需要时间处理即将发生的变化。没有预备动作,用户会觉得「怎么突然就变了?」

注意:预备动作的时间控制在100-200ms之间。太短没效果,太长用户会不耐烦。

2.4 帧率与时间概念

车机界面的帧率,我建议死守60fps。为什么?因为人眼在30fps以下就能感觉到卡顿,而车机使用场景下,用户注意力本来就分散,卡顿会直接导致操作失误。

帧率 体验 适用场景
60fps 流畅 所有交互动效
30fps 可接受 非交互的装饰动画
15fps以下 卡顿 尽量避免

时间概念也很重要。一个动效该持续多久?我个人习惯:

  • 微交互(按钮点击):100-200ms
  • 页面切换:300-400ms
  • 弹窗出现:250-350ms
  • 复杂转场:400-600ms

记住一个原则:车机上的动效要比手机快20%左右。因为驾驶场景下,用户没有耐心等动画播完。

2.5 贝塞尔曲线入门

贝塞尔曲线听起来高大上,其实就是用来描述缓动曲线的数学工具。在CSS里,我们用 cubic-bezier() 来控制。

/* 标准缓出 */
cubic-bezier(0.25, 0.1, 0.25, 1.0)

/* 弹性效果 */
cubic-bezier(0.68, -0.55, 0.27, 1.55)

/* 我常用的车机缓动 */
cubic-bezier(0.4, 0.0, 0.2, 1.0)

四个参数分别代表:起点控制点的x、y,终点控制点的x、y。你不需要背这些数字,重要的是理解曲线形状决定了运动节奏。

避坑指南:我曾经在车机上用了带负值的贝塞尔曲线(比如上面的弹性效果),结果在低端芯片上直接掉帧到20fps。后来我学乖了——车机动效尽量用标准缓动,别玩花哨的弹性曲线。

贝塞尔曲线的入门其实就一句话:曲线越陡,速度越快;曲线越平,速度越慢。 记住这个,你就能看懂大部分缓动曲线了。

2.6 其他基本原则速览

剩下的原则我就不展开讲了,简单列一下:

  • 跟随与重叠:比如列表滚动时,每个item延迟一点点出现
  • 慢入慢出:其实就是缓动的另一种说法
  • 弧线运动:真实世界的物体很少走直线
  • 次要动作:主动画之外的辅助动画,比如卡片翻转时带一点阴影变化
  • 节奏:整个界面的动效要有一致的「呼吸感」

这些原则不是死规矩,而是工具。你用得越多,越能体会到什么时候该用、什么时候该打破。

最后说一句:动效设计不是炫技。车机上尤其如此。每个动效都要问自己:这个动画帮用户理解界面了吗?还是纯粹为了好看?如果是后者,删掉它。