冷门的HTML - tabindex 的做用

冷门的HTML - tabindex 的做用

HTML 的 tabindex 属性开发过程当中通常不会使用到,最近开发中有个需求兼顾富交互,便总结了一下。本篇文章同时收录在个人【前端知识点】中,Github连接直达,欢迎 Starhtml

按照惯例,放上官方定义前端

兼容性:Safari不支持!git

阅读本文您将收获

  • tabindex的做用
  • tabindex的使用
  • 如何利用 tabindex 创造更好的用户体验

前言

  • 在咱们平常使用网页的过程当中,能够经过键盘控制一些元素的聚焦,从而达到便捷访问的目的github

  • element 分为 focusable非focusable ,若是使用了tabindex就能够改变相关的行为面试

  • 在HTML中有6个元素默认支持聚焦:编程

    • href 属性的 <a> 标签
    • href 属性的 <link> 标签
    • <button></button> 标签
    • <input /> 标签 (排除带有 type="hidden" 属性的)
    • <select></select> 标签
    • <textarea></textarea> 标签
  • 以上的元素默认均可以使用 Tab 键,以及 JS focus() 方法聚焦缓存

document.querySelector("a").focus();
  • 使用 tab键 进行聚焦元素时,聚焦的顺序等于元素在代码中的出现前后顺序,当咱们进行富交互优化时,就须要用到 tabindex 这个属性来帮助咱们进行更好用户体验的优化了

tabindex的做用

  • ①元素是否能聚焦:经过键盘这类输入设备,或者经过 JS focus() 方法性能优化

  • ②元素何时能聚焦:在用户经过键盘与页面交互时微信

  • 通俗来讲:就是当用户使用键盘时,tabindex用来定位html元素,即便用tab键时焦点的顺序。网络

tabindex的范围

tabindex理论上能够使用在几乎全部元素上
  • tabindex 理论上能够用在几乎全部元素上,无论这个元素默认是当否支持聚焦
tabindex 有三个值:0,-N(一般是-1),N(正值)
  • tabindex=0,该元素能够用tab键获取焦点

    • 且访问的顺序是按照元素在文档中的顺序来focus,即便采用了浮动改变了页面中显示的顺序,依然是按照html文档中的顺序来定位
  • tabindex<=-1,该元素用tab键获取不到焦点,可是能够经过js获取

    • 这样就便于咱们经过js设置上下左右键的响应事件来focus
    • 取值 -1~-999 之间没有区别,但为了可读性和一致性考虑,推荐使用 -1
  • tabindex>=1,该元素能够用tab键获取焦点,并且优先级大于tabindex=0

    • 不过在tabindex>=1时,数字越小,越先定位到;
    • 若是多个元素拥有相同的 tabindex ,他们的相对顺序按照他们在当前DOM中的前后顺序决定

tabindex的使用

tabindex 决定聚焦顺序
  • 可聚焦元素中,正整数数值越大,顺序越日后,正整数数值的节点顺序比0值的节点靠前
  • 代码:
// HTML
<button type="button" tabindex="1">tabindex === 1</button>
<button type="button" tabindex="999">tabindex === 999</button>
<button type="button" tabindex="0">tabindex === 0</button>
  • 效果:

在这里插入图片描述

  • 可聚焦元素中,相同 tabindex 数值的节点,根据 DOM节点 前后顺序决定聚焦顺序
  • 代码:
// HTML
<button type="button" tabindex="0">tabindex === 0</button>
<button type="button" tabindex="1">tabindex === 1</button>
<button type="button" tabindex="999">tabindex === 999</button>
<button type="button" tabindex="0">tabindex === 0</button>
  • 效果:

在这里插入图片描述

tabindex 决定是否聚焦
  • 节点的 tabindex 设置为 -1 时,当前节点使用 tab键 不能聚焦
  • 代码:
// HTML
<button type="button">未设置tabindex</button>
<button type="button" tabindex="-1">tabindex === -1</button>
<button type="button" tabindex="0">tabindex === 0</button>
<button type="button" tabindex="1">tabindex === 1</button>
  • 效果:

在这里插入图片描述

tabindex 与JS编程聚焦
  • 经过 tabindex 结合JS可让默认不支持聚焦的节点进行聚焦,tabindex 为不超出范围的任何整数值均可以
  • 代码:
// HTML
<button type="button" @click="clickBtn()">点击让DIV聚焦</button>
<div id="FocusDiv" ref="FocusDiv" tabindex="-1">这是一个div</div>

// JS
clickBtn: function() {
    document.getElementById('FocusDiv').focus();
}
  • 效果:
    在这里插入图片描述

如何利用 tabindex 创造更好的用户体验

针对自定义标签进行富交互优化

  • 咱们在建立一个自定义的标签时,若是默认行为中不包含聚焦事件,咱们能够使用 tabindex 为它增长聚焦功能,从而能够像不少可聚焦节点同样进行顺次焦点聚焦了

针对特定节点禁止聚焦操做

  • 某些浮层及上层节点,如 toast组件、模态框、侧边弹出信息等,咱们不但愿节点被用户聚焦捕获,能够将节点的 tabindex 设置为 -1,就能避免这一问题

复杂列表控制聚焦顺序

  • 一些复杂的树形结构或者列式结构,若是须要用户操做顺序按照咱们预想的书序进行聚焦,能够利用tabindex 值的大小来进行处理。

写在最后

若是你以为这篇文章对你有益,烦请点赞以及分享给更多须要的人!

快到碗里来!百度校招还有HC!甩简从来!

极速直接内推【字节跳动】&【百度】&【猿辅导】&【京东】

欢迎关注微信公众号【全栈道路】,获取更多科技相关知识及免费书籍。

往期好文

相关文章
相关标签/搜索