前言
在现代的网站和应用程序中,鼠标和触摸屏成为使用者主要的输入方式。但是,对于身体残疾或者视力障碍等需要使用其他输入设备的用户来说,如键盘,这种输入方式往往更加方便和实用。因此,对于无障碍设计,合理地实现键盘焦点和点击事件的交互是应该被考虑的。
问题描述
在现代界面设计中,键盘焦点和点击事件之间有着紧密的联系。当页面上的某个元素获取焦点之后,用户可以通过键盘上的方向键进行导航,选择想要的元素,并通过回车键来触发其点击事件。但是,在现实世界中的页面设计中,不同控件的键盘焦点和点击事件交互往往都存在不同的问题。例如:
- 在某些网页上,当用户通过 Tab 键来移动到某个具有下拉菜单功能的按钮上时,该按钮的下拉菜单弹出,覆盖了焦点所在的其他元素,使得用户无法进行导航。
- 同样地,当用户在某个具有自动完成功能的输入框中输入内容时,输入框弹出的下拉菜单如 EditText、AutoCompleteTextView、Spinner 等并没有提供实用的键盘导航设置,只能通过鼠标来选择。
- 对于键盘焦点的聚焦顺序管理也存在困难,页面上的多个小部件可能被放置在无序、不直观的顺序中,给用户的操作带来了很大的困扰。
解决方案
为了解决上述问题,我们可以通过以下三个方面来进行:
自定义键盘操作
在很多情况下,我们可以使用自定义键盘操作来解决焦点和点击事件交互的问题。例如,我们可以注册键盘事件监听器,在用户按下特定的键时来触发所需的操作。例如,在输入光标前和后插入自动完成的下拉列表,同时,可以调用光标所在控件的 onClick 方法。下面是示例代码:
// javascriptcn.com 代码示例 function onKeyDown(event) { if (event.keyCode === 40) { // down arrow showDropdown(); } else if (event.keyCode === 38) { // up arrow hideDropdown(); } else if (event.keyCode === 13) { // enter key if (isDropdownVisible()) { selectDropdownOption(); } else { invokeElement(event.target); } } } inputElement.addEventListener('keydown', onKeyDown);
按钮逻辑
在设计按钮操作逻辑时,我们应该考虑到键盘焦点和点击事件的交互,因为这两种操作方式都应该能够触发相同的操作。例如,点击按钮时,应该将焦点设置在该按钮上,并且按下回车键应该触发该按钮的点击事件。
// javascriptcn.com 代码示例 <button id="my-button" onclick="doSomething()">Click me</button> <script> function doSomething() { // do some action } document.getElementById('my-button').addEventListener('keydown', function(event) { if (event.keyCode === 13) { // enter key doSomething(); } }); </script>
表单元素管理
在表单设计中,我们应该考虑到键盘焦点的聚焦顺序,让用户更能轻松地进行表单输入。在实践中,我们可以通过设置 tabindex 属性来定义焦点的聚焦顺序。在 HTML5 中,谷歌提供了一个用于无障碍设计的自定义聚焦顺序的手册,可以考虑在未来支持的电脑浏览器中使用。例如:
// javascriptcn.com 代码示例 <label> Name: <input type="text" tabindex="1" id="name"> </label> <label> Address: <input type="text" tabindex="2" id="address"> </label> <label> Zip Code: <input type="text" tabindex="3" id="zipCode"> </label> <label> Phone Number: <input type="text" tabindex="4" id="phoneNumber"> </label>
总结
在现代互联网时代,键盘焦点和点击事件交互对于网页设计是至关重要的。对于需要使用键盘来进行操作的残疾人群体,这种交互方式变得格外重要。在实现无障碍设计时,我们应该尽可能考虑到所有可能的使用情况,同时提供完善的无障碍支持。
参考资料
- WAI-ARIA Authoring Practices 1.1 - 7.1.2 Keyboard Interface
- WebAIM - Keyboard Accessibility
- 阿里云前端团队:无障碍体验最佳实践
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653e579b7d4982a6eb7dc6e0