ARIA: timer 角色

timer 角色用于向辅助技术表明一个元素是一个数值计数器,用于列出从起点开始经过的时间量或直到终点所剩余的时间量。辅助技术不会播报计时器的更新,因为它具有隐式 aria-live 值为 off

html
<div role="timer" id="eggtimer">0</div>

这定义了这个 div 元素为一个没有剩余时间的计时器。

描述

timer 角色用于向辅助技术表明这部分网页内容是一个实时区域,其中包含一个列出剩余时间或已用时间的计时器。计时器的内部文本应该是一个不断更新的当前时间测量值。虽然该值不一定需要机器可解析,但除非计时器暂停或到达终点,否则它应在固定时间间隔内持续更新。

alertlogmarqueestatus 一样,timer 角色也是一个实时区域,并且可以由 实时区域 属性进行修改。

关联的 WAI-ARIA 角色、状态和属性

aria-labelaria-labelledby

有些屏幕阅读器在播报计时器元素的内容之前会先播报其名称。如果名称可见,请使用 aria-labelledby 进行引用。包含 aria-label 提供了一种方法,可以使用未显示在屏幕阅读器读取内容时显示的文本来为计时器元素的可见内容加上前缀。命名计时器不是必需的,因此如果没有合适的名称,可以省略这两个属性。

aria-live

具有 timer 角色的元素具有隐式 aria-live 值为 off

可访问性考虑

如果需要设置时间限制(例如,出于安全原因),用户应可以选择关闭或延长该限制。如果时间限制是由于实时事件(如拍卖或游戏)而产生的,或者完成表单所需的时间对于有效提交至关重要,则此限制不适用。

示例

一个基本的计时器

本示例包含一个从 30 秒倒计至 0 秒的计时器。整个时间显示区域具有 role="timer",并且还具有 aria-atomic 属性,以指示该区域应作为一个整体进行播报,而不仅仅是更改的区域。由于隐式的 aria-live="off",默认情况下更改不会被播报;当计时器剩余时间达到 10 秒时,我们手动将角色更改为 "alert",以便播报一次。

html
<div id="countdown" role="timer" aria-atomic="true">
  <span id="number">30</span> seconds left!
</div>
css
html {
  font-size: 50px;
  text-align: center;
  margin-top: 1em;
  font-family: sans-serif;
}

#number {
  font-family: monospace;
  color: #cc0000;
  font-weight: bold;
  font-size: 1.25em;
  vertical-align: middle;
}
js
const numElement = document.getElementById("number");
const liveRegion = document.getElementById("countdown");
let startTime = new Date().getTime();

function decrement() {
  const timeNow = new Date().getTime();
  const elapsedTime = Math.floor((timeNow - startTime) / 1000);
  let newNumber = 30 - elapsedTime;

  if (newNumber >= 0) {
    numElement.textContent = newNumber;
  }

  if (newNumber === 10) {
    liveRegion.setAttribute("role", "alert");
    setTimeout(() => {
      liveRegion.setAttribute("role", "timer");
    }, 999);
  }
}

window.setInterval(() => {
  decrement();
}, 500);

规范

规范
无障碍富互联网应用程序 (WAI-ARIA)
# timer

另见