加载指示器反馈

表示程序正在处理的忙碌动效 —— 环形、旋转,或其他不沿轨道延展的形状动画。

  • 转圈
  • 菊花
  • 转圈圈
  • 小圆圈转啊转
  • 加载指示器
  • 活动指示器
  • 进度指示器
  • 转圈动画

示例

示例可交互

Web / iOS / Android 对照

Web需自己实现

桌面与移动端主流浏览器

Spinner

也叫 Loader

Web 没有画环形忙碌动画的原生元素。`<progress>` 渲染出来是一条轨道,不是转圈;它的不定量状态也仍然是条形。转圈要用 CSS 动画或 SVG 自己画。

通常怎么做:用 CSS 关键帧转一个圆环。无障碍上有两件相关但不同的事,按需要取用:有需要播报的状态文字时,把那块区域标成 role="status"(官方定义是「一个包含对用户的提示性信息、但重要性不足以成为 alert 的实时区域」,隐含 aria-live=polite);某个区域正在异步更新时,对该区域设 aria-busy="true"(官方定义是「指示某个元素当前正在被修改」),并在完成后恢复为 false。具体页面可能两者都用,也可能只需要其中一个 —— 但它们不是二选一的替代关系。

iOS原生支持

平台通用范围

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,靠样式区分形态,所以那不是两条词条塌成一个实现。

Android原生支持

平台通用范围

Circular Progress Indicator

也叫 Loading Indicator

Compose: CircularProgressIndicator

Material 把进度指示器明确分成「linear and circular」两个变体,环形那个(CircularProgressIndicator)归这里。M3 Expressive 另出的 Loading Indicator 组件也归这里,但它不是一个环:官方要点写的是「用形状与动效吸引注意」,并把它定位为「不定量环形进度指示器的替代」,还注明「不用于会从不定量转成定量的过程」。两者的共同点不是形状相同,而是都不沿一条线性轨道延展 —— 这正是本词条与进度条的分界。另外该组件的 Web 实现官方标为 Unavailable。

使用规范

什么时候用

  • 操作耗时超过约 1 秒,需要告诉用户系统没死
  • 版面窄、放不下一条横轨道,只能用一个环形占位时

什么时候别用

  • 耗时极短(不到半秒)→ 别显示,闪一下反而更烦
  • 首屏内容加载 → 优先用骨架屏,感知上更快
  • 已经知道进度却仍然只转圈 —— 有数值就把它显示出来,别让人干等

容易混淆

给 AI 的提示词

这条词条还没有经过验证的实现提示词。