区分鼠标"click"和屏幕阅读器"Press"



我正在制作一个可访问的网站菜单,并希望区分鼠标" click" click" click" clock"和a voiceover"按"以打开子菜单。当我安装事件时,鼠标事件将在画外音"按"而不是键盘事件上触发。

有没有办法告诉差异?

当前菜单是基于鼠标的菜单,我阻止单击事件切换子菜单。但是,我希望键盘只能用屏幕读取器打开子菜单,这些读取器指示用户使用命令 option Spacebar进行按下,以触发鼠标事件"单击" ...

我现在正在使用的一种解决方案是仅在悬停活动...

时仅禁用单击事件。

更新:

目标:为了触发一个可以看到并链接到页面的人,启用了一个巨大的菜单弹出窗口,该页面显示了不能为无法的人提供巨型菜单链接。从我的研究中,巨型菜单,即使编码精美,这对视力障碍也很痛苦。即使Aria可以说菜单项可以扩展,也似乎没有通知菜单,即使菜单可以说明菜单的扩展,也不会通知菜单。我认为用户导航到新页面并跳过Mega菜单链接的内容将是一个更好的体验。

解决方案:通过使用事件侦听器的集合,我能够成功,独立地定位键盘输入Voickover/ScreenReader点击和鼠标单击。

在菜单项的鼠标上,我设置了一个预防量表标志,在鼠标上我删除标志,以便单击菜单项未遵循链接并仅打开子菜单。

在键盘上,我检查是否按下" Enter"键。如果是这样,我显示了子菜单,并防止链接被遵循,以便用户和选项卡通过巨型菜单项。

让屏幕读取器单击以按照专用于显示Mega子菜单的页面。

另外,对于ScreenReaders,我可以打开子菜单并将键盘焦点发送到子菜单的第一个元素。不确定这是否对用户更直观。

评论:让我知道您是否认为此解决方案有问题。到目前为止,它很棒。它假设人们发动机控制问题和良好的视力使用选项卡 Enter进行导航,并且视力障碍的人使用其ScreenReaders单击等效的EG。VoiceOvers命令 选项 空格。

您会从此博客文章中注意到,不可能区分鼠标用户和屏幕读取器用户

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

即使有可能,尝试这样做也被认为是侵犯隐私的行为,因为它与用户识别自己是残疾人的差异。不应该有任何理由要这样做 - 您的用例是什么?

更新

您的解决方案除了悬停的触摸设备以外,您的解决方案将在任何地方工作,但是话虽如此,您会遇到太多麻烦。只要您以语义标记巨型菜单,盲人用户就会没有问题。

请看一下https://www.capitalone.com/以获取合理访问的Mega-Menu实现。

您最好的镜头是覆盖菜单项上的可访问性,处理nsaccessibilitypressaction,然后传递到超级实现,以像往常一样像往常一样处理事物,而无需您超越任何东西。我还没有尝试过,但是我认为它有很大的工作机会。关键是VoiceOver援引AccessibilityPerformaction(更具体地说是AppKit的可访问性支持,请根据VoiceOver的要求),因此您知道某些辅助技术(例如VoiceOver)请求打开菜单,而不是鼠标。

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

最新更新