结构不可预知时用不确定指示
别名: 未知结构用转圈 · 不可预知选不确定 · spinner when layout unknown
概念解释
不确定指示(indeterminate indicator)——转圈、点脉冲、来回滑动的条——只声明「工作尚未结束」,不声明即将出现的几何。当结构还取决于这次载荷、这次查询、这次生成结果时,这是诚实的等待语言。硬画一套骨架等于在猜布局;猜对了也只是碰巧,猜错了会在到达瞬间把空间预期撕掉。
选型在这里反转:结构不可预知,不是「没有等待反馈」,而是禁止用结构语言去填一段还没有结构的时间。
机制
骨架的全部力量来自预演。预演要求一份先于数据的地图。搜索页会因零条、十条、还是一组筛选芯片而完全换形;对话会在气泡、卡片、工具调用之间跳;生成式画布会从空白长出未知数量的块。这些形状写在响应里,不写在路由里。此时任何灰块都是一张空头支票:视觉系统会按支票划分区域,载荷一到,划分作废,预演变成一次需要撤回的错误模型。
不确定指示拒绝划分。它把等待锚在一个不占内容槽位的标记上,通常是操作点附近或内容区的中性位置。人得到的模型是「还在做」,不是「三行列表马上到」。模型更瘦,所以不会在到达时破产。代价也清楚:定向要等真内容出来才开始,同一段等待里能提前做的空间准备更少。不可预知时,这笔代价比一张会作废的地图便宜。
边界
「暂时不知道」和「永远不知道」不同。向导的下一步、筛选之后的列表,往往在请求发出后不久就知道是哪种模板,可以在结构确定的那一拍从转圈切到骨架,不必从头扛到结束。总量其实已知(文件大小、导出行数)时,不确定指示不传达还剩多少,应升到确定进度,而不是因为「版面还没画好」就一直转。局部刷新一块已知卡片时,结构对该块是可预知的,用转圈盖住整页是选错了作用范围。无障碍通道上,转圈若没有「正在加载」的等价状态,不可预知也不能变成静默。
怎么落地
- 把「结构是否写在路由/模板里」当成分支:写着的用骨架;写在响应里的,等待只用不确定指示,不要用通用三行灰块冒充所有页面。
- 结构在等待中途揭晓时允许升级:一旦知道是列表还是画布,再切到匹配的骨架或确定条。
- 把不确定指示放在这次等待所属的区域,不要因为结构未知就改成全屏模态。
- 验证:对搜索、生成、权限分叉的页面,在载荷返回前截一帧。若画面已经画出了具体行数或模块形状,而真实结果经常不是那个形状,选型就选错了。
延伸
- 同组:I2.01.1 结构可预知时用骨架屏 · I2.01.3 骨架结构与实际内容不符会造成跳变 · I2.01.4 骨架屏比转圈更能降低用户对等待时长的主观估计 · I2.01.5 极短的加载时间内出现指示反而会制造多余的视觉闪烁 · I2.01.6 转圈缺乏进度信息,长时间使用会被误认为卡死 · I2.01.7 骨架屏的动画节奏需要统一,杂乱的呼吸动效会显得廉价
- 相邻:E6.08 加载指示器 · E6.09 确定与不确定进度 · I1.02 思维连续性阈值
- 站内检索:
indeterminate indicator·unknown structure·spinner versus skeleton