以 skill 自身的术语
Apple Design 提炼了 Apple 在 WWDC 上关于界面的分享,主要是 Designing Fluid Interfaces(WWDC 2018),并将其转化为构建流畅、具有物理感的网页 UI 的规则。它面向从事手势驱动界面工作的设计师和开发者:拖拽、滑动、面板(sheets)、弹簧动画、动量、可中断的过渡、半透明材质与深度、排版(视觉尺寸优化、字符间距、行距)以及减弱动效行为。
贯穿始终的原则是:动效应从屏幕上当前的实际值开始,继承用户的速度,向前投射动量,并且在任意时刻都可被抓取和撤销。弹簧动画取代了固定时长的动画,因为它天生可中断且能感知速度,该 skill 最后以 Apple 的八条设计原则作为共同语言收尾。
它产出什么
- 按压反馈 CSS:在 :active 状态下将控件缩放,并配合 100ms 的 ease-out 过渡。
- 动效弹簧调用示例,将临界阻尼默认值与动量回弹变体并列展示。
- 一个 project() 辅助函数,实现动量投射,decelerationRate 默认值为 0.998。
- 减弱透明度 CSS:将半透明工具栏替换为纯色背景,且不做模糊处理。
工作方式
- 01在指针按下时响应
反馈应属于按下的瞬间,而非松开的那一刻:控件被按下的那一刻就应立即高亮,并将输入路径上任何非必要的东西(包括约 300ms 的点击延迟)都视为一种缺陷。
- 021:1 跟踪指针
使用带 capture 的 Pointer Events,这样即使指针离开元素边界,追踪也不会中断;并且要尊重用户抓取的位置,而不是直接吸附到元素中心。
- 03让动效可被中断
运动中的元素必须可被抓取并可在飞行途中反向操作;用户不应被迫等待当前动画结束才能重新引导它。
- 04用弹簧(spring)建模运动
弹簧通过简单地改变目标来吸收新输入,因此运动保持连续;固定时长的脚本则没有可重新定位的对象。
- 05交接释放时的速度
将指针释放时的速度传给弹簧,这样拖拽和动画之间就没有接缝;当 API 需要相对速度时,用剩余距离进行归一化。
- 06先推算动量,再吸附
不要直接从手指松开的位置吸附;要像滚动减速那样推算静止位置,并选择离该推算位置最近的吸附目标。