我最喜欢的动画技巧:指数平滑(2023)
文章/技术范围
- 许多读者喜欢对指数平滑和缓动的清晰解释以及交互式演示。
- 一些人指出,这在游戏/Flash 时代是个众所周知的想法(缓动、弹簧函数、PID/比例控制),但看到它被清楚地讲解仍然很有价值。
- 也有人强调它的关键好处:这是一种无状态的平滑运动方式,不受帧率变化或目标变化影响(例如相机运动、惯性滚动),而不只是另一个从 0→1 的缓动曲线。
UI 动画的价值
- 支持者认为动画:
- 帮助用户跟踪状态变化,理解“东西去了哪里”(例如地图平移、窗口最小化)。
- 在输入被注册时提供反馈,尤其是在手指会遮挡控件的触摸屏上。
- 让界面感觉更“精致”,并带来令人愉悦的情绪体验,这对很多用户都很重要。
- 批评者认为:
- 动画通常会增加延迟,感觉拖沓,而且对简单的二元控件并无必要。
- 立即响应、更加“利落”的界面更适合生产力和高频使用。
- 许多现实中的实现速度慢、卡顿,或者会阻塞输入,所以这种技术常常被用错。
切换开关 vs 复选框,以及控件语义
- 关于带动画的开关是否是好隐喻的争论很激烈:
- 有人说,对于即时系统状态(灯开/关、模式 A/B),切换开关更清晰,而复选框更适合表单。
- 也有人觉得开关含义模糊:很难看出哪一边是“开”,通常只依赖颜色,并且可能被误认为可拖动滑块。
- 还有人认为,带有清晰标签的经典复选框/单选按钮更易访问、更易发现,也更具文化上的稳健性。
可访问性、偏好设置与“减少动态效果”
- 多位评论者在系统层面关闭了动画,并表示界面感觉更快、更平静。
- 另一些人指出,操作系统和浏览器支持
prefers-reduced-motion;网页界面应该尊重它,但往往没有这么做。 - 仅靠颜色表示状态受到批评,尤其对色盲用户和电子墨水用户而言;更推荐使用形状、标签和对比度。
实现与性能
- 有人认为这些重 JS、基于 canvas 的演示过度设计,并指出在 Firefox 和移动浏览器中存在严重的性能/冻结问题。
- 也有人强调,在生产环境中通常会使用 CSS transitions/easing 或经过精心调校的弹簧函数,而不是很多
requestAnimationFrame循环。 - 讨论还涉及指数平滑的渐近行为,以及替代方案(基于二次/平方根的方法、摩擦项、PID 控制)。