繁体   English   中英

区分鼠标“单击”和屏幕阅读器“按”

[英]Differentiate between mouse “click” and screen reader “Press”

我正在制作一个可访问的网站菜单,并希望区分鼠标“单击”和VoiceOver“按”以打开子菜单。 当我console.log事件时,鼠标事件是在VoiceOver“按”而不是键盘事件上触发的。

有没有办法分辨出差异?

当前,该菜单基于鼠标悬停,并且我阻止了Click事件切换子菜单。 但是,我希望只有键盘的用户能够使用屏幕阅读器打开子菜单,该屏幕阅读器指示用户使用命令+选项+空格键进行PRESS,从而触发鼠标事件“单击”。

我现在正在研究的一种解决方案是仅在悬停处于活动状态时才禁用点击事件...

更新:

目标:为可以看到并链接到显示无法打开的人的超级菜单链接的页面的用户触发超级菜单弹出窗口。 根据我的研究,即使菜单编码精美,对于视觉障碍者来说也是一种痛苦。 即使aria可以告知菜单项是可扩展的,也无法识别菜单已扩展,这似乎并没有在扩展时通知。 我认为对于用户来说,导航到新页面并跳至大型菜单链接的内容会是更好的体验。

解决方案:通过使用事件侦听器集合,我能够成功且独立地定位键盘ENTER单击VoiceOver / screenreader单击和鼠标单击。

在将鼠标移到菜单项上时,我设置了preventClick标志,在鼠标移开时,我删除了该标志,以便单击菜单项时不跟随链接,而仅打开子菜单。

在按下键盘时,我检查是否按下了“输入”键。 如果是这样,我将显示该子菜单,并阻止该链接被跟随,以便用户和制表符浏览大型菜单项。

屏幕阅读器仅需单击以跟随指向专门显示超级子菜单页面的链接。

另外,对于屏幕阅读器,我可以打开子菜单并将键盘焦点发送到子菜单的第一个元素。 不知道这对于用户而言是否更直观。

评论:如果您认为此解决方案有问题,请告诉我。 到目前为止,效果很好。 假设人们的运动控制问题和良好的视力使用tab + enter进行导航,而视障人士则使用其屏幕阅读器单击等效项。 VoiceOvers Command + Option +空格键。

您将从此博客文章中注意到,不可能天真地区分鼠标用户和屏幕阅读器用户

http://unobfuscated.blogspot.com/2013/05/event-handlers-and-screen-readers.html

即使可能,尝试这样做也被视为侵犯隐私,因为这等于用户将自己标识为已禁用。 应该没有任何理由要这样做-您的用例是什么?

更新

您的解决方案将可以在除不存在悬停功能的触摸设备之外的所有地方使用,但是,话虽这么说,您会遇到很多麻烦。 只要您在语义上标记了大型菜单,盲人用户就可以毫无问题地浏览它。

请访问https://www.capitalone.com/ ,以获取可合理访问的大型菜单实施。

最好的选择是覆盖菜单项上的accessibilityPerformAction,处理NSAccessibilityPressAction,然后传递给super的实现以照常处理事情,而无需覆盖任何内容。 我还没有尝试过,但是我认为它很有可能工作。 关键是accessibilityPerformAction由VoiceOver调用(更具体地讲,是应VoiceOver的要求由AppKit的辅助功能支持)调用的,因此您可以通过这种方式知道某些辅助技术(例如VoiceOver)要求打开菜单,而不是鼠标。

出于好奇,我仍然想知道为什么要区分这两种情况,您希望实现什么不同的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM