加载指示器反馈
表示程序正在处理的忙碌动效 —— 环形、旋转,或其他不沿轨道延展的形状动画。
- 转圈
- 菊花
- 转圈圈
- 小圆圈转啊转
- 加载指示器
- 活动指示器
- 进度指示器
- 转圈动画
示例
示例可交互
Web / iOS / Android 对照
桌面与移动端主流浏览器
Spinner
也叫 Loader
Web 没有画环形忙碌动画的原生元素。`<progress>` 渲染出来是一条轨道,不是转圈;它的不定量状态也仍然是条形。转圈要用 CSS 动画或 SVG 自己画。
通常怎么做:用 CSS 关键帧转一个圆环。无障碍上有两件相关但不同的事,按需要取用:有需要播报的状态文字时,把那块区域标成 role="status"(官方定义是「一个包含对用户的提示性信息、但重要性不足以成为 alert 的实时区域」,隐含 aria-live=polite);某个区域正在异步更新时,对该区域设 aria-busy="true"(官方定义是「指示某个元素当前正在被修改」),并在完成后恢复为 false。具体页面可能两者都用,也可能只需要其中一个 —— 但它们不是二选一的替代关系。
平台通用范围
Activity Indicator
也叫 ProgressView
SwiftUI: ProgressView(circular 样式)
官方把不定量的那种直接命名为活动指示器:「An indeterminate progress indicator — also called an activity indicator — uses an animated image to indicate progress」,并说明「所有平台都支持一个看起来在旋转的圆形图像」。定量的环形也归这里 —— 官方说定量指示器可以填充「linear or circular」轨道,环形那种「沿顺时针方向填充」。开发接口与进度条共用 ProgressView,靠样式区分形态,所以那不是两条词条塌成一个实现。
平台通用范围
Circular Progress Indicator
也叫 Loading Indicator
Compose: CircularProgressIndicator
Material 把进度指示器明确分成「linear and circular」两个变体,环形那个(CircularProgressIndicator)归这里。M3 Expressive 另出的 Loading Indicator 组件也归这里,但它不是一个环:官方要点写的是「用形状与动效吸引注意」,并把它定位为「不定量环形进度指示器的替代」,还注明「不用于会从不定量转成定量的过程」。两者的共同点不是形状相同,而是都不沿一条线性轨道延展 —— 这正是本词条与进度条的分界。另外该组件的 Web 实现官方标为 Unavailable。
使用规范
什么时候用
- 操作耗时超过约 1 秒,需要告诉用户系统没死
- 版面窄、放不下一条横轨道,只能用一个环形占位时
什么时候别用
- 耗时极短(不到半秒)→ 别显示,闪一下反而更烦
- 首屏内容加载 → 优先用骨架屏,感知上更快
- 已经知道进度却仍然只转圈 —— 有数值就把它显示出来,别让人干等
容易混淆
给 AI 的提示词
这条词条还没有经过验证的实现提示词。