HTML中的焦点管理

前言

焦点作为页面交互中的重要一环,涉及到的知识点也比较多,有必要做一个统一的总结。

HTML 中的可获取焦点的元素

  • 具有 href 属性的 HTMLAnchorElement/HTMLAreaElement
  • 非禁用态的 HTMLInputElement/HTMLSelectElement/HTMLTextAreaElement/HTMLButtonElement
  • HTMLIFrameElement(虽然将其聚焦没有任何有用的效果)
  • 具有 tabindex 属性的任何元素。

焦点的获取

HTML 规范中将 focus 聚焦性分为三种类型:“编程可聚焦”、“单击可聚焦”和“顺序可聚焦”。

  • document 加载完成会获取到焦点
  • 用户点击获取焦点
  • 通过 js 的 element.focus()方法获取
  • 添加了 tabindex 的元素可通过 tab 切换获取焦点

其中,元素上 tabindex 的值设置有一定的考究:

CSS 中的焦点伪类

这里提一下, 聚焦的元素可以通过 css 中的:focus 与:focus-within 伪类来进行样式调整.

/* 元素获取焦点时的样式 */
input:focus {
  border-color: #ff5733;
  outline: none;
}

/* 容器内有元素获得焦点时的样式 */
.container:focus-within {
  background-color: #f0f0f0;
}

在线效果预览

JS 获取当前聚焦元素

  • document.hasFocus(): 判断当前文档是否被聚焦
  • document.activeElement: 获取当前文档内的聚焦元素

失去焦点

blur()方法的作用是从元素中移走焦点。

  • 调用 blur()方法时,并不会把焦点转移到某个特定的元素上;仅仅是将焦点从调用这个方法的元素上面移走而已

  • focus 了 A 元素的时候其他元素会自动失去焦点

document.querySelector("#btn1").addEventListener("click", () => {
  document.querySelector("#div1").focus();
});
document.querySelector("#btn2").addEventListener("click", () => {
  document.querySelector("#div1").blur();
});

焦点事件

不会冒泡的事件: focus, blur
会冒泡的事件: focus-in, focus-out

参考

  • HTML 规范: focusing-on-focus
  • HTML 规范:dom-focus-dev
  • which-html-elements-can-receive-focus
  • focus_event
  • MDN: Tabindex, 键盘导航的 JavaScript 组件
  • https://segmentfault.com/a/1190000003942014

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径

上一节课我们好不容易装好了 Scrapy,今天我们就来学习如何用好它,有些同学可能会有些疑惑,既然我们懂得了Python编写爬虫的技巧,那要这个所谓的爬虫框架又有什么用呢?其实啊,你懂得Python写爬虫的代码&…

RocketMQ教程-(5)-功能特性-顺序消息

顺序消息为 Apache RocketMQ 中的高级特性消息,本文为您介绍顺序消息的应用场景、功能原理、使用限制、使用方法和使用建议。 应用场景​ 在有序事件处理、撮合交易、数据实时增量同步等场景下,异构系统间需要维持强一致的状态同步,上游的事…

JavaWeb银行项目

主要功能 实现了贷款、存款、理财、提现、充值、开户、绑卡、转账等功能。 介绍 1、这个是一个类似有支付宝一样的web项目。 2、登录和注册,都是通过手机号来进行的。 3、注册的新用户需要先进行开户操作,然后进行绑卡操作。 4、在开户的时候回给你…

Linux 学习记录57(ARM篇)

Linux 学习记录57(ARM篇) 本文目录 Linux 学习记录57(ARM篇)一、外部中断1. 概念2. 流程图框 二、相关寄存器1. GIC CPU Interface (GICC)2. GIC distributor (GICD)3. EXTI registers 三、EXTI 寄存器1. 概述2. 内部框图3. 寄存器功能描述4. EXTI选择框图5. EXTI_EXTICR1 &…

金融中的数学:贝叶斯公式

1.贝叶斯定理 贝叶斯定理是概率论中的一项重要定理,用于在已知某一事件的条件下,求另一事件发生的概率。它是根据条件概率推导出来的,得名于英国数学家托马斯贝叶斯。 贝叶斯定理可以表示为: 这个式子就是贝叶斯公式&#xff0c…

Hadoop 之 Spark 配置与使用(五)

Hadoop 之 Spark 配置与使用 一.Spark 配置1.Spark 下载2.单机测试环境配置3.集群配置 二.Java 访问 Spark1.Pom 依赖2.测试代码1.计算 π 三.Spark 配置 Hadoop1.配置 Hadoop2.测试代码1.统计字符数 一.Spark 配置 环境说明环境版本AnolisAnolis OS release 8.6Jdkjava versi…

Docker系列 1 - 镜像和容器

Docker系列 1 - 镜像和容器 1、关于 Docker2、镜像 image3、容器 container 1、关于 Docker docker官网:http://www.docker.com docker中文网站:https://www.docker-cn.com/ Docker Hub 仓库官网: https://hub.docker.com/ Docker 的基本组成&#…

Okhttp-LoggingInterceptor的简单使用

概述 Okhttp除了提供强大的get,post网络请求外,还包含请求日志的拦截器,可以监视,重写,重试调用请求。 简单使用 我们在构造OkHttpClient时,通过addInterceptor()方法添加我们需要的过滤器。 object OkhttpUtils{……

十二、数据结构——二叉树基本概念及特点

数据结构中的二叉树 目录 一、二叉树的基本概念 二、二叉树的特点 三、二叉树的分类 四、二叉树的存储结构 (一)、顺序存储 (二)、链式存储 一、二叉树的基本概念 二叉树是一种重要的数据结构,它是每个节点最多有两个子节点的树结构。在二叉树中,每个…

【iOS】自定义字体

文章目录 前言一、下载字体二、添加字体三、检查字体四、使用字体 前言 在设计App的过程中我们常常会想办法去让我们的界面变得美观,使用好看的字体是我们美化界面的一个方法。接下来笔者将会讲解App中添加自定义字体 一、下载字体 我们要使用自定义字体&#x…

Docker 安装 Nacos

简介 Nacos 是一个轻量级的服务发现、配置管理和服务管理平台,它支持多种语言(Java、Go、Node.js 等)和多种协议(HTTP、gRPC、DNS 等),能够帮助开发者构建微服务体系结构,简化了应用程序在不同…

RunnerGo相比较JMeter有哪些优势

当谈到性能测试需求时,JMeter和RunnerGo都提供了丰富的功能,包括测试场景设置、执行性能测试和性能测试结果分析。然而,这两工具在结构方面存在一些区别。以下是对它们进行比较的另一种角度: 模块化设计: JMeter采用…

计算机网络模型

计算机网络模型 网络模型网络模型中各层对应的协议封装与分用TCP/IP协议簇的组成 网络模型 OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP四层模型 应用层、传输层、网络层、网络接口层 TCP/IP五层模型 应用层、传输层、网络层、数据链路…

Linux 学习记录55(ARM篇)

Linux 学习记录55(ARM篇) 本文目录 Linux 学习记录55(ARM篇)一、使用C语言封装GPIO函数1. 封装GPIO组寄存器2. 封装GPIO模式以及相关配置3. 封装GPIO初始化结构体4. 使用自己的封装配置GPIO 一、使用C语言封装GPIO函数 1. 封装GPIO组寄存器 #define GPIOA ((GP…

基于STM32设计的智能奶瓶

一、项目背景 随着我国计划生育政策的放开,婴幼儿数量持续上涨,国民收入逐年提高,家庭在婴幼儿产品方面的消费日益扩大。奶瓶是母婴市场的刚需。目前婴儿哺育的问题引起新爸新妈的高度重视。一方面,人们使用的传统奶瓶已经不能很好地满足现代人对于智能化生活的需求。另一…

钉钉和金蝶云星空接口打通对接实战

钉钉和金蝶云星空接口打通对接实战 对接系统:钉钉 钉钉是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台深度整…

无线投屏手机(安卓)屏幕到 Linux(ubuntu 22.04)桌面

1.安装 scrcpy 安装 scrcpy会自动安装 adb. 这个版本的adb功能不是最全的,需要删掉,然后从链接 https://dl.google.com/android/repository/platform-tools-latest-darwin.zip 下载,解压安装即可。 2. 在手机上 打开开发者模式和 USB调试…

【1++的C++初阶】之list

👍作者主页:进击的1 🤩 专栏链接:【1的C初阶】 文章目录 一,什么是list二,构造与析构2.1 结点结构2.2 链表结构2.3 迭代器结构 三,部分重要接口的作用及其实现3.1 迭代器相关的接口3.2 list相关…

【网络安全】DVWA靶场实战BurpSuite内网渗透

BurpSuite 内网渗透 一、 攻击模式介绍1.1 Sniper(狙击手)1.2 Battering ram(攻城锤)1.3 Pitchfork(草叉)1.4 Cluster bomb(榴霰弹) 二、 DVWA靶场搭建2.1 下载DVWA工程2.2 添加网站…

redis中使用bloomfilter的白名单功能解决缓存预热问题

一 缓存预热 1.1 缓存预热 将需要的数据提前缓存到缓存redis中,可以在服务启动时候,或者在使用前一天完成数据的同步等操作。保证后续能够正常使用。 1.2 解决办法PostConstruct注解初始化