shou_bo
Project setup
npm install
Compiles and hot-reloads for development
npm run serve
Compiles and minifies for production
npm run build
Customize configuration
See Configuration Reference.
无障碍相关
特殊class
- aria-control-target: 手动添加。此节点和其后代会受无障碍菜单的控制。
- aria-theme-inverse: 手动添加。此节点的背景文字颜色会和无障碍菜单里的设置相反。
- aria-no-zoom: 手动添加。此节点不会受无障碍菜单里缩放的控制。
- aria-theme-[some color]: 自动添加。设置无障碍颜色时,这个class会被加到带有aria-control-target class的节点上。
- aria-active: 自动添加。开启无障碍功能时添加到html和body上。
- aria-magnifying: 自动添加。开启无障碍功能且开启其中的放大镜功能时添加到body上。
特殊attribute
- data-aria-navigation-area: 手动添加到导航区包裹元素。是导航区的标记。这种包裹元素应该只用于包裹区域、提供tab键focus功能和无障碍提示信息,不应承担其他功能。
- data-aria-viewport-area: 手动添加到视窗区包裹元素。是视窗区的标记。这种包裹元素应该只用于包裹区域、提供tab键focus功能和无障碍提示信息,不应承担其他功能。
- data-aria-interaction-area: 手动添加到交互区包裹元素。是交互区的标记。这种包裹元素应该只用于包裹区域、提供tab键focus功能和无障碍提示信息,不应承担其他功能。
- tabindex: 手动添加,表示这个元素需要能够被聚焦,且在被聚焦、鼠标hover时应该提取出其上储存的无障碍信息来朗读、显示。对于a、button、input等天生可以聚焦的标签,如果不写这个,则能聚焦但不会提取出无障碍信息。导航区、视窗区、交互区等特殊区域的包裹元素的直接子元素都应该有这个属性,如果设计上不应该能通过tab键focus到某个直接子元素,则应该把tabindex赋值为-1。这是为了避免点击特殊区域的不可focus的子孙元素,浏览器从子孙元素往上找可focus的元素,最终找到了特殊区域元素上,并在其上触发focus事件。
- aria-label: 手动添加,可选,表示元素在无障碍信息中显示的类型,不写的话会根据元素标签得到其在无障碍信息中显示的类型。
- aria-description: 手动添加,可选,表示元素在无障碍信息中显示的详细描述,不写的话会拿元素的innerText作为描述。
特殊node(自动添加)
<style id="aria-big-cursor-style-node"></style>
: 大号光标样式代码。
<style id="aria-zoom-style-node"></style>
: 缩放样式代码。
数据同步
同一个域的多个页面的accessibility组件实例、该域下的唯一一份local storage之间的无障碍菜单设置会自动同步。
初次加载一个组件实例,改变设置,自动保存到storage,触发storage事件,自动从storage读取设置,同步到组件,不会导致组件设置变化,over。
第二次加载一个组件实例,起初为默认设置状态,自动从storage读取到设置,同步给该组件,因为该组件新设置状态与storage中相同,不会再同步回storage,over。
在另一个页面改变组件实例设置状态,自动把该组件新的设置状态保存到storage,触发storage事件,自动把storage数据同步给当前所有加载了的组件,导致有些组件状态变化,但所有组件的新状态都和storage相同不会再同步回storege,over。
无障碍组件与外界的消息沟通
向本组件$emit
- show:组件显示
- hide:组件隐藏
- audio-end: 音频播放结束
- audio-error: 音频出错
- audio-abort: 音频中止(并非暂停,还不知道什么情况下会触发这个)
向原型对象上的$eventBus发消息。
- aria-show:组件显示
- aria-hide:组件隐藏
- aria-show-magnify-area: magnify区域开始显示
- aria-hide-magnify-area: magnify区域开始隐藏
监听原型对象上的$eventBus的消息。
用于在js中进行无障碍辅助信息的提供
- request-read: 请求朗读指定的文本。
- request-magnify: 请求在大屏幕或曰放大镜区域显示指定的文字
- request-process-text-element: 请求对某个元素的子孙元素中所有符合【是包含文字的叶子节点】这一条件的元素,都添加上tabindex="0"这一attribute。(工作量太大时可以用这招。)
使用无障碍组件时,路由跳转相关规则
- 单纯的路由跳转,尽量用a标签或router-link标签,不要在点击事件回调里跳转,因为上述标签天生支持键盘操作。
- 复杂逻辑的路由跳转,不得不在事件回调里进行操作时,除了响应click事件,还要响应keydown事件:
@keydown.enter.passive...
- 因为前端路由变化不会导致被复用的组件失焦,而很多原本只是hover到某个区域时才显示的东西,比如hover时弹出的菜单,为了支持键盘访问,改为了在focus-within时也显示,又不希望点击后这些东西还在那里显示着,所以:对于点击会导致前端路由改变的东西,可以通过给前端路由对象添加全局后置钩子,在其中令focus的元素blur来解决:
router.afterEach(() => {document.activeElement.blur()})
;对于不会导致前端路由改变的东西,只好不厌其烦地在点击回调里调用blur了。