dom元素的tabindex属性介绍及在vue项目中的应用
dom元素的tabindex属性介绍及在vue项目中的应用
tabindex属性作用
- 让普通dom元素变为可聚焦的元素
- 让普通dom元素可以参与顺序键盘导航(通常使用Tab键,因此得名)。
tabindex属性的取值和影响
它接受一个整数作为值,具有不同的结果,具体取决于整数的值:
- tabindex=负值 (通常是tabindex=“-1”),表示元素是可聚焦的,但是不能通过键盘导航来访问到该元素,用JS做页面小组件内部键盘导航的时候非常有用。
tabindex="0",表示元素是可聚焦的,并且可以通过键盘导航来聚焦到该元素,它的相对顺序是当前处于的DOM结构来决定的。- tabindex=正值,表示元素是可聚焦的,并且可以通过键盘导航来访问到该元素;它的相对顺序按照tabindex 的数值递增而滞后获焦。如果多个元素拥有相同的 tabindex,它们的相对顺序按照他们在当前DOM中的先后顺序决定。
根据键盘序列导航的顺序,值为 0 、非法值、或者没有 tabindex 值的元素应该放置在 tabindex 值为正值的元素后面。
注意:如果我们在 div上设置了 tabindex 属性,它的子元素内容不能使用箭头键来滚动,除非我们在内容上也设置 tabindex。查看这篇 fiddle 来理解 tabindex 的滚动影响。
tabindex属性的使用
<div
v-if="dialogVisible"
tabindex="1"
class="dialog"
ref="dialog"
@blur="loseFocus"
>
这是一个弹窗
</div>
tabindex属性项目中的应用
需求:有一个默认隐藏的弹窗dialog,当鼠标点击一个button时,让弹窗显示;当用户点击弹窗dialog之外的其他区域时隐藏弹窗(要求不能使用全屏遮罩)
- 给弹窗
dialog加一个tabindex属性,让其变为可聚焦的元素。tabindex="1" - 给弹窗
dialog绑定一个失去焦点的事件。@blur="loseFocus" - 给
button绑定click事件,当click事件触发的时候,让弹窗展示,同时聚焦弹窗。<button @click="handleOpenDialog">打开弹窗同时获取焦点</button> - 在用户点击
button时,触发handleOpenDialog函数,在这个函数内控制弹窗的展示,同时让聚焦弹窗。 - 在用户点击弹窗
dialog之外的区域时,会触发弹窗的失去焦点的事件函数loseFocus - 在
loseFocus函数内控制弹窗的隐藏
详细代码如下:
<template>
<div>
<button @click="handleOpenDialog">打开弹窗同时获取焦点</button>
<div
v-if="dialogVisible"
tabindex="1"
class="dialog"
ref="dialog"
@blur="loseFocus"
>
这是一个弹窗
</div>
</div>
</template>
<script lang='ts'>
import { Vue, Component } from "vue-property-decorator";
@Component({
name: "Father"
})
export default class Father extends Vue {
// data
dialogVisible: boolean = false; //是否显示弹窗
/**
* 显示弹窗,同时获取焦点
*/
handleOpenDialog() {
// 显示弹窗
this.dialogVisible = true;
// 让弹窗获取焦点
// 第一种写法
// setTimeout(() => {
// (this.$refs.dialog as any).focus();
// }, 0);
// 第二种官方写法(推荐)
this.$nextTick(() => {
(this.$refs.dialog as any).focus();
});
}
/**
* 弹窗失去焦点, 隐藏弹窗
*/
loseFocus() {
this.dialogVisible = false;
}
}
</script>
<style lang="scss">
.dialog {
width: 100px;
height: 100px;
border: 1px solid #ccc;
&:focus {
outline: 0;
}
}
</style>
备注:如果不想让弹窗聚焦的时候有默认的外边框样式,可以加一段css代码控制样式
.dialog:focus {
outline: 0;
}
效果图
有聚焦默认样式

无聚焦默认样式

dom元素的tabindex属性介绍及在vue项目中的应用的更多相关文章
- 如何在Vue项目中,通过点击DOM自动定位VScode中的代码行?
作者:vivo 互联网大前端团队- Youchen 一.背景 现在大型的 Vue项目基本上都是多人协作开发,并且随着版本的迭代,Vue 项目中的组件数也会越来越多,如果此时让你负责不熟悉的页面功能开发 ...
- JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分)
JQUERY选择和操作DOM元素(利用正则表达式的方法匹配字符串中的一部分) 1.匹配属性的开头 $("[attributeName^='value']"); 2.匹配属性的结尾 ...
- vue项目中遇到的一些问题
或访问:https://github.com/littleHiuman/experiences-about-vue 欢迎补充! vuex 状态 vue-cli 命令行 vue vue vue-rou ...
- scss/less语法以及在vue项目中的使用(转载)
1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
- vue项目中postcss-pxtorem的使用及webpack中的配置 css中单位px和em,rem的区别
移动手机版要求我们在制作嵌入h5的时候去适配不同的手机.适配有多重模式,有flex.百分比等.字体大小的控制也有px.百分比.rem等单位,webpack中 px转rem. vue项目中postcss ...
- 在vue项目中使用canvas-nest.js,报parameter 1 is not of type 'Element'
canvas-nest.js是一款轻量的网页特效,如图: github地址:https://github.com/hustcc/canvas-nest.js 在普通的html项目中,只要将<sc ...
- 在Vue项目中使用vw实现移动端适配
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...
- 如何在Vue项目中使用vw实现移动端适配(转)
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...
随机推荐
- Appium之WebView自动化
WebView的测试:主要作用在混合(Hybrid)的应用 * 一部分是原生界面和代码,而另一部分是内嵌网页 * 比如微信.支付宝 * 内嵌了一个浏览器内核,由浏览器内核实现的 安卓应用中的内嵌的展示 ...
- 线阵CCD-TCD1209采集系统&驱动设计
关键字:CPLD+AD9945+TCD1209+CY7C68013A TCD1209,一款经典的CCD线阵单色传感器.本次设计一款基于usb2.0高速采集图像. CPLD+AD9945+TCD1209 ...
- idea实现简单热部署
首先我们打开设置tomcat的页面
- Python 3 对象关系映射(ORM)
ORM 对象关系映射 Object Relational Mapping 表 ---> 类 字段 ---> 属性 记录 ---> 对象 # mysql_client.py impor ...
- Python3 并发编程小练习
实现基于TCP协议套接字,服务端实现接收客户端的连接并发 # server.py import socket from threading import Thread server = socket. ...
- 11条MySQL规范,你知道的有几个?
一.数据库命令规范 · 所有数据库对象名称必须使用小写字母并用下划线分割 · 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) · 数据库对象的命名 ...
- Linux之find命令操作技巧
一.前言 工作中,我们常用find命令查找某些文件或者删除一些旧的日志文件,所以学会find命令的操作技巧就极为重要. 二.find常用参数选项 -depth 从指定目录下最深层的子目录开始查找 -m ...
- servlet的三大作用域对象和jsp的九大内置对象及其四大作用域对象
servlet的三大作用域对象: request(HttpServletRequest) session(HttpSession): application(ServletContext):tomca ...
- 数组知识总结(js)
js数组知识注意点: 声明空数组时,和c语言中的不同 js c var arr=[ ] //合法,声明一个空数组,数组长度为0; int a[];//错误因为在c中声明一个数组不仅要指定类型还要指定数 ...
- 用js写九九乘法表格,附带背景颜色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...