
点击之后先给即时确认
任何一次点击都应该在很短时间内给出可见变化。按钮按下时改变背景或轻微内陷,能立刻告诉用户系统收到了这次操作,这一层反馈的成本极低,却能挡掉大量重复点击。
需要跳转或重新加载的操作,点击后立刻进入禁用状态,防止连点造成重复提交。禁用不等于只有变灰,最好同时显示正在处理,让用户知道这只是暂时的。
如果操作本身很快完成,就不要先显示加载再瞬间消失,那反而闪烁刺眼。少于三百毫秒的响应,直接给结果更稳。
点击后的状态变化要落在触发它的元素附近。按钮旁边出现结果提示,比页面另一角弹出通知更容易被理解,视线不需要来回移动。
加载状态要分级
响应时间不同,处理方式也应该不同。三百毫秒内出现结果,什么都不必显示;超过一秒要有加载指示;超过五秒要说明当前在做什么,比如正在生成报表;超过十秒要允许用户离开,并承诺完成后通知。
加载指示的形态也有讲究。不确定要等多久时用转圈或进度条,能用预估进度时优先显示百分比,用户对进度条的容忍度明显高于转圈,因为他知道还剩多少。
骨架屏适合结构稳定的列表和卡片,能减少内容出现时的跳动;不适合结构差异很大的页面,用错反而像是加载错了内容。
成功与失败要指向下一步
成功反馈不要只说操作成功。带上关键信息:订单号、刚才提交的对象、接下来会发生什么。用户需要的是确认自己做对了哪件事,而不是一句通用祝贺。
失败反馈要给出原因和可行的动作。网络问题提示检查网络并重试,权限问题说明需要谁开通,数据冲突说明哪一条记录已经存在。没有可执行信息的失败提示,等于让用户去猜。
重要操作的反馈不宜自动消失。提交、支付、删除这类动作,提示应该停留到用户主动关闭,或者直接跳转到结果页,让结果本身承担反馈。需要审批的操作还要给后续动作留位置,让用户知道除了等,还能做什么。
竞态与误操作
同一个按钮连续点击、快速切换标签、来回翻页,都可能让先发出的请求后返回,页面显示成旧数据。做法是给请求加上标识,只接受最后一次的结果,或者在前一个请求结束前禁用触发入口。
破坏性操作要提供撤销或二次确认。能撤销的优先撤销,比如删除后给出几秒钟的恢复入口,成本比弹窗低,体验也更好;不可逆的操作才用确认弹窗,并且把对象信息写进弹窗,让用户能核对。
状态设计是这类细节的集合,看起来琐碎,但正是这些地方决定了产品用起来是否让人放心。
把这些状态写进验收清单,每次改完相关功能都过一遍。缺少反馈的问题往往在演示时看不出来,只有真实操作才会暴露。


