✦ UX 交互模式 · 那些有名字的交互细节
一个界面好不好用,常常不取决于功能列表,而取决于一批被反复打磨、各自有名字的交互细节: 点击后界面是立刻响应还是转圈等待;一处数据被改动后用户能否一眼找到; 误删之后能不能反悔;鼠标斜着滑向子菜单时菜单会不会半路消失。 这些模式大多诞生于具体产品的实战(Gmail 的撤销发送、37signals 的 Yellow Fade、Amazon 的 Mega Menu), 后来沉淀为通用词汇。本系列把其中 7 个挑出来,每个都做成可交互触发、并排对照「有 / 没有」的 demo。 正文中文,交互模式 / API 关键词保持英文。
Optimistic UI:先更新界面,再等服务器
点赞、收藏、勾选待办——这些操作几乎总是成功。乐观更新的思路是:点击瞬间就把 UI 更新到「成功后的样子」,把真正的网络请求放到后台;万一失败再回滚并提示。对照「悲观更新」(点击后 disable + spinner,等响应才变),拖动延迟与失败开关,看两种策略在同一条时间线上的体感差异。
Yellow Fade Technique:让「刚刚变化的地方」自己跳出来
异步更新一张列表后,用户的视线不知道该落在哪。37signals 的经典做法:把刚新增 / 改动的那一行瞬间染成黄色,再缓缓淡回——用一次短暂的高亮把注意力主动引导过去,而不需要用户自己找。对照关掉高亮的版本,体会「找得到」与「找不到」的差别,并看 transition 时长如何影响可察觉度。
Snackbar & Undo:用「可以反悔」替代「你确定吗」
删除一项,与其先弹一个 confirm 打断用户,不如直接执行,再从底部滑出一条带「撤销」的 Snackbar,几秒后自动消失(Gmail 撤销发送即此模式)。它把确认成本从「每次操作前」挪到「极少数想反悔时」。demo 含倒计时进度条、悬停暂停、多条排队,并和 confirm() 流程并排对照。
Safe Triangle:斜着滑向子菜单,不要半路关掉它
多级菜单的经典痛点:鼠标从父项斜向移动到子菜单时,中途会滑过其他父项,天真实现会立刻切走、把子菜单关掉。Amazon Mega Menu 的解法:以光标当前位置和子菜单两角连成一个三角形容差区,只要指针还在三角内,就暂缓切换。开关对比两种实现,并把三角区域和鼠标轨迹画出来。
Hover Intent:区分「路过」与「真的想看」
mouseenter 一触即发的菜单,会在鼠标只是路过时频繁闪烁。Hover Intent 加一道判定:指针进入后停留超过阈值(或移动速度降下来)才真正触发,离开则带一点关闭延迟。拖动阈值滑块,用「快速划过」和「停下来」两种手势,对比一触即发与带意图判定的触发次数。
Fitts's Law:目标越大越近,越快越准
费茨定律把「指到一个目标多难」量化为 ID = log ₂(D/W + 1):距离 D 越大、目标 W 越小,耗时越长、越易点偏。两个推论很实用:视觉可以小,但热区(hit target)要够大(用 padding / 伪元素撑开);屏幕四角是无限大的目标。demo 实测你的点击时间,并演示「视觉=热区」与「视觉小、热区大」的命中率差距。
View Transitions:让同一个元素在两个状态间「长」过去
从列表点进详情,如果界面硬切,用户需要重新定位「我点的是哪个」。共享元素转场给前后两个状态里的同一元素标记 view-transition-name,浏览器自动补出它位移 + 缩放的中间动画,把缩略图平滑长成大图。先讲同文档版(document.startViewTransition()、和硬切并排对照),再到跨文档(MPA)版:两页同源各加一行 @view-transition { navigation: auto },真实的页面跳转也能补间——内嵌双页站点现场演示,可切 crossfade 与圆形 clip-path 擦除,并讲 ::view-transition-* 伪元素树。
🔗 相关链接
📐 规范 / 文档
-
CSS View Transitions Module Level 1
· W3C / CSSWG
View Transitions 的规范本体:
startViewTransition、view-transition-name与::view-transition-*伪元素树的定义。 - Can I use · View Transitions API (single-document) · caniuse.com 同文档 View Transitions 的实时浏览器支持矩阵。
📎 模式出处 / 背景
- The Yellow Fade Technique · 37signals Yellow Fade 的出处:用一次淡出的黄色高亮把用户视线引到刚变化的地方。
- Breaking down Amazon's mega dropdown · Ben Kamens Safe Triangle 的经典拆解:逆向 Amazon Mega Menu 的「指向意图」算法。
-
View Transition API
· MDN
共享元素转场的原生 API:
startViewTransition与view-transition-name全貌。 -
Cross-document view transitions
· Chrome
跨文档(MPA)转场:
@view-transition { navigation: auto }与::view-transition-*伪元素树的定制。 - Response Times: The 3 Important Limits · Nielsen Norman Group 0.1s / 1s / 10s 三条感知阈值——本系列「缩短反馈间隙」的量化依据。
- Fitts' Law in HCI · Scott MacKenzie 费茨定律在人机交互中的形式化:Index of Difficulty 与吞吐量。