交互细节
等待、反馈与动效的设计记录。
一个东西「能用」和「像是被做出来的」,差距通常不到百分之二。但那百分之二决定了别人怎么评价它。
我说不出具体是哪一个瞬间,因为手感从来不落在单个交互上,它散落在等待的时机和失败时的反馈里。
手感首先是时间的分配
用户点下一个按钮之后,正确的响应时间不是「尽快」,而是有节奏的:
- 0–100ms:感觉是即时的。这时候任何加载指示器都是干扰。
- 100–300ms:这是「正在处理」的区间,一个安静的进度状态刚好。
- 300ms 以上:用户开始怀疑出问题了。这里必须给出可解释的反馈,而不是继续转圈。
大部分「卡」的感觉,不是因为慢,是因为在慢的区间里给了错误的反馈。一个不动的按钮比一个诚实的进度条更让人焦虑。
手感不是让等待消失,是让等待被理解。
手感是承认失败的方式
我越来越确信,一个产品的体面程度,是在它出错的时候决定的。
具体来说有三个问题必须回答:
发生了什么。 不是「出错了」,而是「这个文件太大,超过了 20MB 的限制」。
我做了什么导致的。 让用户能定位到自己填的那一项,而不是对着空白页猜。
下一步怎么办。 一个能立刻执行的动作,哪怕是最保守的「重来一次」。
我自己的工具页面会为这三件事各留一个位置。失败态比成功态更花时间,但它出现得更多——每个用户都会遇到,只是程度不同。
手感还藏在「不该动的地方」
这是最容易被忽视的一条:正文不应该跟随装饰晃动。
当一个页面里所有东西都在动的时候,用户找不到锚点,注意力反而无法停留。真正的手感来自对比:周围在动,而你要读的那段文字是稳的。
我给自己的规则是:
- 装饰层可以有低频循环,但幅度必须小到不会被注意到
- 正文永远不参与任何 transform
- 悬停反馈只作用在触发元素自身,不带动整块区域
- 滚动位移按所属段落归一,不做全局累积
动得克制,和不动一样难,但它才是长时间阅读的前提。
一个具体的例子
我做过一个证件照工具,处理一张大图要三四秒。最早的版本转圈,用户反馈「感觉卡住了」。
后来的版本改了三件事:先立刻把原图显示出来(0ms),再在原图上做一个细微的处理中状态(100ms),最后用一条从下往上的进度线(300ms 后),完成时让结果从原图的位置展开(落位时)。
同样三四秒,感知完全不同。变的不是速度,是用户每一刻都知道发生了什么。
怎么判断自己有没有做到
有一个粗暴但有效的方法:录屏,然后静音快进看一遍。如果只看画面就能知道每一步在做什么、进行到哪了、下一步会怎样,那手感就成立了。
如果需要暂停才能看懂某个状态,那一刻就是手感断裂的地方。
最后那百分之二没有捷径,它只是在每个等待的时刻都诚实地回答了三个问题:我在哪、发生了什么、接下来怎么办。