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单位越来越 ...
随机推荐
- C#实现在foreach遍历中删除集合中的元素(方法总结)
目录 方法一:采用for循环,并且从尾到头遍历 方法二:使用递归 方法三:通过泛型类实现IEnumerator 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致 ...
- Python3 并发编程4
目录 Event事件 线程池与进程池 基本概念 使用方法 和信号量的区别 协程(coroutine) 基本概念 实现方式 多线程爬取梨视频 Event事件 用来控制线程的执行 e.isSet()查看对 ...
- 04Shell流程控制
流程控制 if 单分支结构 if 条件测试 then 命令序列 fi 双分支结构 if 条件测试 then 命令序列 else 命令序列 fi 多分支结构 if 条件测试 1 then 命令序列 [e ...
- Java设计模式的7种设计原则还有很多人不知道
前言 其实没有设计模式我们也能完成开发工作.但是为什么需要设计模式呢?让你看起来很牛,没错这个算一个.让你的代码层次感分明,可读性强而且容易维护.让你像我一样有更多的摸鱼划水时间. 可能有人说我一个类 ...
- MarkDown快速入门(typora)
MarkDown快速入门(typora) 1.代码块: //代码块语法: ```java ```shell 1.java代码 package com.yjx.jdbc import java.sq ...
- express 中间件的简单应用与实现
express 中间件的简单应用与实现 看了慕课网双越老师的课之后结合自己的理解做了一些简单的总结,如有不恰当之处,欢迎指正. 提到 express 就不得不提到中间件,接下来就简单的介绍一下 exp ...
- Caffe源码-Layer类
Layer类简介 Layer是caffe中搭建网络的基本单元,caffe代码中包含大量Layer基类派生出来的各种各样的层,各自通过虚函数 Forward() 和 Backward() 实现自己的功能 ...
- JVM 学习笔记二 :JVM内存区域
一.内存分配概述
- Java工作流引擎表单引擎之JS表单字段输入脚本验证
关键字: 表单设计器, 字段验证. workflow,ccform, ccBPM. 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流 ...
- ABAP分享六 alv显示的几种方式的简单示例
方法1,也是大家常见的方法通过函数 REUSE_ALV_GRID_DISPLAY TYPES: BEGIN OF ty_spfli, "定义结构 carrid like s ...