b-spinner 的 VUE-js 可访问性——使用 Aria 进行数据加载的音频公告,每 3 秒重复一次

2024-01-31

当微调器直观地显示数据正在加载时,我试图添加“数据加载”音频公告的可访问性。 显然,我正在寻找一种声音公告,最好是一种无需单击任何内容即可自动播放的公告。我的目标是自动听到公告并在加载时每 3 秒重复一次。

下面的代码会自动生成一个工作公告。 然而,拥有它的目标每 3 秒重复一次(或 10 秒或其他)有NOT已实现。

早期阶段:对于搜索此内容的人,我发现放置一个tabindex = "0"进入代码至少允许一些音频继续进行(在那时是进步),但人们必须ab 到元素听到公告。这可以被视为是不可取的。 另外,有人推荐not使用tabindex = 0想法,请参阅我的后续问题:

该元素是 b-spinner,示例标记代码为:

 <b-spinner id = "myspinny" small variant="primary"
               show.bind="isLoading"
               role="alert"
               aria-busy = true;
               aria-live="assertive"
               aria-atomic="true"
               aria-label = "Data is loading.  Please wait for the load to finish."
               label="Searching, please wait for the specific data load" @click="myspinny"
               alt="Processing... please wait for the specific data load"
               title= "Data Loading"
               v-if="resultsBusy">
  </b-spinner>

上面的标记语法编译,旋转器仍然运行,并且 NVDA 中有一个真实的音频公告(大概像 JAWS 这样的类似工具会有相同的结果)。然而,最终目标是让它每 3 秒重复一次。

此外,上述标记可能有一些未使用/不需要的元素。

我希望至少获得一次音频公告(现已实现),但最终目标是每 3 秒发布一次公告,该公告将在页面加载时停止(很像旋转器)。

注意:我看到了一个与辅助功能相关的网页:https://bootstrap-vue.org/docs/components/spinner https://bootstrap-vue.org/docs/components/spinner为此,建议使用嵌套元素,但我没有看到真正的语法示例。此外,有关堆栈溢出的其他类似问题不处理 b-spinner 元素本身,而是处理元素。

有一个详细设计请看这里 https://pretagteam.com/question/vuejs-accessibility-for-bspinner-audio-announcement-of-data-loading-using-aria-that-repeats-every-3-seconds。不幸的是,截至此编辑 [11/15/2021],我个人无法从该链接获取解决方案以在我的 vue 设置(即 vue 版本 2)中工作。


我理解尝试各种 ARIA 属性和角色的必要性,但有时这会让事情变得复杂。使用 ARIA 时,最好保持最小化。例如,你有role="alert" and aria-live="assertive". The 警戒角色 https://www.w3.org/TR/wai-aria/#alert给你一个隐含的、自信的生活区域。

自信区域might清除其他屏幕阅读器公告。来自spec https://www.w3.org/TR/wai-aria/#aria-live:

用户代理或辅助技术MAY选择在发生断言更改时清除排队的更改。

因此,您每 3 秒发布一条消息可能会破坏其他公告。也许不太可能,但理论上是可能的。

我的一般经验法则是使用aria-live="polite"除非您的公告非常重要,以至于用户需要放下手头的所有事情来聆听。

使用纯 html 而不是 vue.js,以下内容将每 3 秒发布一次公告。

<div aria-live="polite" id="mymessage"></div>
<button onclick="myclick()">start annoying message</button>
<script>
  function myclick() {
    setInterval(myTimer, 3000);

    function myTimer() {
      document.getElementById("mymessage").innerHTML = 'still loading';
    }
  }
</script>

如何将其转换为 vue.js 代码,我不确定,抱歉。但它为您提供了目标应该是什么的模板。

显然,当你完成后,你会想杀死计时器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

b-spinner 的 VUE-js 可访问性——使用 Aria 进行数据加载的音频公告,每 3 秒重复一次 的相关文章

随机推荐

  • 为 ggplot2 生成亮色和暗色对

    brewer pal n 8 name Paired 最多可以创建八个颜色对 但其中只有少数颜色适合打印 有没有更灵活的函数可以生成深色吊坠 应该是深色的 在黑暗中看起来像相同的颜色 可打印 很容易与亮色区分开来 有没有 colorbrew
  • 设计基于权限的安全模型

    我在开发一个 vb net winforms 应用程序 目前我们使用简单的角色来确保安全 我们根据当前用户是否具有所需的角色来启用 禁用特定控件 我们已经到了这样的地步 这已经不够精细了 我们的应用程序基于我们称之为站点的不同物理位置 用户
  • 有什么方法可以找出 Angular 2 中触发变化检测的因素吗?

    我最近发布了一个新组件 它似乎每秒多次触发更改检测 some debugging code ngDoCheck console log DO CHECK new Date toLocaleTimeString Results 我还没有弄清楚
  • 使用 Redux 时如何声明 ReactJS 默认 props?

    在 React 中声明默认 props 的正确方法是什么 这样当我在使用 redux 异步分配的 props 上调用 map 时 我就不会收到未定义的错误 现在 使用以下语法 在尝试分配 trans filter 时出现错误 因为数据在渲染
  • 在非对象上调用成员函数 count() (Laravel 5)

    我有一个项目列表 我可以单击它 它 需要 显示项目名称以及项目任务列表 ToDo 应用程序 但是当我单击某个项目时 我收到此错误 H2 项目名称将显示 h2 gt project gt name if project gt tasks gt
  • Android 无法保留嵌套在其他片段中的片段

    我的应用程序有问题 我尝试在另一个Fragment中添加三个Fragment 然后 Eclipse 显示 java lang IllegalStateException 无法保留嵌套在其他片段中的片段 这是我在 childFragments
  • 在常量表达式中调用“static constexpr”函数是...错误? [复制]

    这个问题在这里已经有答案了 我有以下代码 class MyClass static constexpr bool foo return true void bar noexcept foo 我希望从那时起foo is a static co
  • OracleConnection.Open 抛出 ORA-12541 TNS 无侦听器

    所以我通过 C 连接到外部服务器 我刚刚安装甲骨文11g我的机器上的客户端从这里 http www oracle com technetwork database windows downloads index 090165 html ht
  • 在 iPhone 上播放 CAF 声音的最简单方法?

    做到这一点有多难 有人告诉我 在 iPhone 上播放音频非常困难 实在不敢相信 但他说玩一个很难 但同时玩两个或三个就很难了 听起来很可怕 对此大家有什么想说的吗 我想要做什么 我有大约 10 个带有小光点 蜂鸣声和按钮按下声音的 CAF
  • 使用 Groovy 修改节点标签的 Jenkins/Hudson CLI API

    有谁知道如何以非手动方式修改 Jenkins Hudson 节点标签 我的意思是 彻底的 API 如该工具提供的 CLI API 当然无需重新启动 Jenkins Hudson 我的猜测是 最好的选择是使用 Groovy 脚本进入 Jenk
  • 在 JUnit 中检查异常的最佳实践是什么?

    我正在尝试编写测试用例 根据我所读到的内容 我的测试从一开始就应该失败 我应该努力让测试通过 但是 我发现自己正在编写测试来检查边界以及它们应该引起的异常 Test expected NegativeArraySizeException c
  • 如何从ABRecordID获取ABRecordRef?

    我已访问地址簿并成功从中提取了记录和必要信息 我也提取了recordid 我的问题是如何使用这个 recordid 来提取记录 我正在使用的代码是 ABRecordID recordId ABAddressBookRef addressBo
  • C# 如何将光驱盘符从 D: 更改为 Z:

    我正在尝试编写一种方法 将 CD ROM 驱动器从字母 D 更改为字母 Z 但对 WMI 没有任何运气 还有其他方法可以使用 C 来做到这一点吗 public void setVolCDROM SelectQuery queryCDROM
  • `git log --all` 怎么会错过提交点?

    提交后 我会提醒我处于分离的 HEAD 状态 gt git commit m Implemented Runrealfast algorithm detached HEAD af46ac9 Implemented Runrealfast a
  • AWS Lambda 热启动和冷启动

    您好 我是 AWS Lambda 新手 我想知道热 Lambda 函数 热启动 和冷 Lambda 函数 冷启动 是什么意思 谁能详细解释一下热 Lambda 和冷 Lambda 之间有什么区别 上传代码后或一段时间不活动后 您的 Lamb
  • 自解压可执行 C++

    我试图了解自解压 PE 文件的工作原理 有人可以解释为什么我的代码不起作用 或者修复 main 部分 include
  • 来自 std::string 的 std::istringstream 无需复制

    我一直在用这个 ifstream in file txt string line getline in line istringstream iss line 进行一些简单的解析 我想避免不必要的复制以提高性能 所以我尝试 ifstream
  • 如何用selenium获取响应状态码?

    作为一个新手 我想知道是否有一种方法可以获取http响应状态代码来判断一些期望 例如远程服务器关闭 url损坏 url重定向等 在硒中这是不可能的 欲了解更多信息 请点击here https github com seleniumhq se
  • 检测PHP会话是否存在

    Facebook 现在向用户提供订阅服务 以便您可以获得有关更改的实时更新 如果我的应用程序收到更新 我计划将其存储在数据库中 我还想检测他们的会话是否存在 如果是的话我也可以更新那里的数据 我的会话 ID 是 MD5 fb id 秘密 因
  • b-spinner 的 VUE-js 可访问性——使用 Aria 进行数据加载的音频公告,每 3 秒重复一次

    当微调器直观地显示数据正在加载时 我试图添加 数据加载 音频公告的可访问性 显然 我正在寻找一种声音公告 最好是一种无需单击任何内容即可自动播放的公告 我的目标是自动听到公告并在加载时每 3 秒重复一次 下面的代码会自动生成一个工作公告 然