# ARIA

本章节内容主要包括 如何快速运用 UIExtension 框架内置功能实现可访问性, 以及相关的工具介绍。 如果你想详细了解 ARIA 的技术规范以及最佳实践, 可查阅这些地址:

# UIExtension 如何启用可访问性

初始化 PDFUI 时,我们需要加载 aria 附加组件:

new UIExtension.PDFUI({
    addons: [
        // .... 其它 Add-on
        'path/to/lib/uix-addons/aria/addon.info.json' // 必须确保 aria 在最后加载
    ]
    // ... another options
})

如果你的应用是通过 allInOne.js 加载插件 , 因为它已经包含 aria, 所以不需要额外单独加载:

new UIExtension.PDFUI({
    addons: 'path/to/lib/uix-addons/allInOne.js'
    // ... another options
})

更多关于如何加载 add-on 的信息可以参考这里

# UIExtension 内建组件

# aria-label 属性

这些内建组件指定 textlabel 参数后会自动向生成的DOM节点上添加 aria-label 属性, 可点击 run 按钮运行示例, 然后使用屏幕阅读器查看效果:

# 视觉隐藏的内容

在有些场景下需要提供一些可供屏幕阅读器等辅助技术访问但视觉上隐藏的内容,我们可以添加.fv__ui-aria-sr-only类进行样式设置。 这么做可以为视觉障碍用户提供有用的信息或提示,比如有时候我们用不同颜色表示危险、警告等不同类型的信息, 这时候就需要添加额外文本内容告知视觉障碍用户这条信息的类型。

<p class="text-danger">
    <span class="fv__ui-aria-sr-only">Danger:</span>
    This action is not reversible.
</p>

# aria 指令

# @aria:attr 指令

这个指令用于设置 aria- 开头的属性,指令写法是 @aria:attr.${aria-property-name}, aria-property-name 可以参考这里 (opens new window), 其参数值是一个可执行的表达式:

# @aria:label 指令

这个指令用于设置 aria-label (opens new window) 属性, 指令值为i18n词条。

# @aria:labelledby 指令

@aria:labelledby 指令用于生成 aria-labelledby 属性,指令值用 UIExtension 的选择器语法,而不是元素的id。 这是因为 aria-labelledby 属性需要通过id关联到另外一个元素, 由于id可能引起发的全局冲突问题,我们不建议手写id来索引元素,这个指令的选择器语法就可以避免这一问题。

关于更多 aria-labelledby 属性的信息,可以参考这里 (opens new window)

上述示例中,@aria:labelledby="::parent()::childAt(0),,a-colon" 指定了 <input> 前面两个 span 组件的id为标签。关于的选择器语法可以参考这里

# @aria:describedby 指令

@aria:describedby 指令用法和原理和 @aria:labelledby 基本相同,这里不做过多赘述。

关于 aria-describedby 更多信息,可以参考这里 (opens new window)

# @aria:rel 指令

ARIA 规范中,除了 aria-labelledbyaria-describedby 以外还有很多需要关联其它元素的属性。@aria:rel 指令封装了这些常用的属性:

# @aria:circular-focus 指令

这个指令用来控制组件内元素焦点,实现循环跳转功能。通常用于弹窗, 或者一个独立的UI区域。

可参照下面的示例,点击 run 按钮运行。