如何用JavaScript实现一个模态框组件_如何管理焦点和可访问性?

admin 百科 12
模态框真正可用需聚焦管理与可访问性:打开时自动聚焦首个可聚焦元素,限制Tab键焦点范围,关闭后恢复原焦点并正确设置ARIA属性。

如何用JavaScript实现一个模态框组件_如何管理焦点和可访问性?-第1张图片-佛山资讯网

模态框(Modal)要真正可用,不能只靠显示隐藏和遮罩层——焦点管理与可访问性(a11y)是核心。否则键盘用户无法操作、屏幕阅读器无法理解上下文,甚至可能被困在模态框里出不来。

聚焦进入时自动捕获焦点

模态框打开后,焦点必须立即落在模态内容内首个可聚焦元素上(如关闭按钮或第一个输入框),防止焦点留在背景页面或浏览器地址栏。

  • modalElement.focus() 不够——它只对本身可聚焦的元素(如带 tabindex="-1" 的 p)有效;更稳妥的是选中内部第一个可聚焦子元素:
    const focusable = modal.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
    然后 focusable?.focus()
  • 打开模态前,保存当前焦点元素(document.activeElement),便于关闭后恢复

限制 Tab 键焦点范围(焦点环)

键盘用户按 Tab 时,焦点不能“逃”出模态框,也不能陷入背景内容。需手动拦截并循环聚焦在模态内可聚焦元素之间。

  • 监听 keydown 事件,检测 Tab
  • 收集所有可聚焦子元素:
    const focusables = Array.from(modal.querySelectorAll(/* 同上选择器 */));
  • 获取当前焦点索引,按下 Tab 时:若在最后一个元素 → 聚焦第一个;若在第一个且 Shift+Tab → 聚焦最后一个

关闭时正确恢复焦点与状态

模态框关闭后,焦点应回到触发它的元素(如“打开弹窗”按钮),同时确保屏幕阅读器感知到模态已移除。

标签: javascript java 浏览器 safari ios

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~