1.1 - 2.0倍transform-scale方案,这种方案放大的元素不会影响到已确定盒模型的尺寸,比如一个确定了的50px * 50px的元素,元素放大后的尺寸不变,但是容器内部的元素已经放大了,为了避免这种情况在实现时把所有的元素放置到了body下一个容器中,然后通过对这个容器再进行缩放实现iframe内区域的支持Ctrl + Alt + A,实际传到TTS中是Ctrl加Alt加A脚本如何认为一个元素是可读的:
config.extraElementReadingFunc,如果配置了会调用此方法取得元素类型与文本,如果没有配置方法或返回为false继续判断是否是工具条中的元素,工具条中的元素不可读p,a,h1,h2,h3,h4,h5,h6中的一种,如果是则依次按[aria-label],[title],[alt],元素内部文本取值,存在文本就是可读元素;如果不是其中的一种,则按[aria-label],[title],[alt],[value]取值,存在就是可读元素页面元素会被三种方式阅读:指读、连读、tab键触发:
mouseover 事件中取得的元素,如果它是可读的,取得它的可读文本交给TTS apip,a,h1,h2,h3,h4,h5,h6,这些元素下面的可读元素会被忽略;指读模式基于mouseover实现,事件会发送到最深的可读元素上[role],标签名判断,前者的优先级更高,例如:<div role="a">这是一个链接</div>
<a role="img">这是一张图片</a>
input类型的元素会额外判断type,完整的元类型名称映射为:const commonTagTypes: Record<string, string> = {
img: '图片',
button: '按钮',
input: '输入框',
textarea: '输入框',
option: '下拉框',
a: '链接',
video: '视频',
audio: '音频',
qrcode: '二维码',
};
const inputTagTypes: Record<string, string> = {
button: '按钮',
checkbox: '复选框',
color: '拾色器',
date: '日期选择器',
'datetime-local': '日期时间选择器',
email: '邮箱框',
file: '文件框',
month: '月份选择器',
number: '数字框',
password: '密码框',
radio: '单选',
range: '区间输入框',
reset: '重置按钮',
tel: '电话输入框',
text: '文本框',
time: '时间输入框',
url: '网络地址输入框',
week: '周输入框',
};
脚本是如何阅读一个元素文本的:
a 祖先,如果存在就取 a 的类型与文本[aria-label],[title],[alt],[value],元素内部文本取值input元素的文本为空时额外取placeholderTab键就会依次在页面中循环聚焦元素Popup、Tab、Dropdown等常见的UI组件,提供了一种通用的键盘操作解决方案wza-role="list",工具栏监测到这个元素,就会对这个元素的类型进行变更为下拉框,同时增加键盘操作的提示aria-label来控制active函数与hide函数,分别设置到wza-popup-activeFn="functionName"、wza-popup-hideFn="functionName"activeFn,然后把焦点放置在第一个设置上wza-role="listitem"的属性上hideFn,然后把焦点放置回wza-role="list"的下一个元素focusableDocumentSelector属性,工具栏在页面变化过程中收集到匹配的节点,对匹配的节点下级的h1、h2、h3、h4、h5、h6、p节点设置tabindex属性.font-by-wza-192px: { font-size: 19.2px !important; },并把设置到对应的元素上config.mobileFontSizeClassPrefix来解决,例如:// 页面加载时,注意后面的空格
wza2.config({ mobileFontSizeClassPrefix: '.TRS_Editor ' });
// 启动适老化时
wza2.config({ mobileFontSizeClassPrefix: '.web_older .TRS_Editor ' })
1.2、1.4,可以通过配置config.mobileFontSizeLg,config.mobileFontSizeXl来修改,例如:// 1.1/1.2
wza2.config({ mobileFontSizeLg: 1.1, mobileFontSizeXl: 1.2 });