JavaScript学习记录 | DOM事件流 事件冒泡-事件捕获-事件委托

目录

  • DOM事件流
  • 常见面试题
  • 事件冒泡与事件捕获
    • 事件冒泡使用场景
    • 事件捕获使用场景
    • 事件冒泡和事件捕获区别
  • 事件委托 - 利用事件冒泡机制
    • 事件委托应用场景
    • 支持事件委托的事件
    • 事件委托的优缺点


DOM事件流

DOM事件流的三个阶段:捕获阶段 -> 目标阶段 -> 冒泡阶段
在这里插入图片描述


常见面试题

  • 事件冒泡和委托是什么?有什么使用场景?
  • 事件委托的优点和缺点
  • JS事件绑定的原理
  • 事件捕获和冒泡的过程
  • 什么时候用冒泡?什么时候用捕获?

事件冒泡与事件捕获

目的:解决页面中的事件流(事件发生顺序)的问题

  • 事件冒泡:事件从最深节点开始,然后逐步向上传播事件(从内到外)
  • 事件捕获:事件从DOM树的根节点开始,然后逐级向下捕获到最具体的元素(目标元素)(从外到内)

当事件处于目标阶段时,事件调用顺序决定于绑定事件的书写顺序

事件冒泡使用场景

常见的使用场景就是事件委托

通过事件委托,我们可以将事件处理程序绑定到父级元素,而不是直接绑定到每个子元素,从而减少了事件处理程序的数量,提高了性能和代码的可维护性。

事件捕获使用场景

事件捕获在实际开发中使用较少,但仍然有一些特定的使用场景:

  • 事件处理程序前置操作:由于事件处理程序执行顺序的原因,可以在事件到达目标元素之前拦截事件并进行处理
  • 高级事件处理:一些复杂的交互行为可能需要更细粒度的控制,而事件捕获提供了这种能力。例如,可以在事件捕获阶段使用stopPropagation方法停止事件的传播,以防止事件继续向下冒泡

事件冒泡和事件捕获区别

  1. 触发顺序事件捕获先于事件冒泡触发。在事件捕获阶段,事件从DOM树的根节点向下传播到目标元素;在事件冒泡阶段,事件从目标元素向上冒泡到根节点
  2. 事件处理程序执行顺序:在事件捕获阶段,父级元素的事件处理程序会先于子级元素的事件处理程序执行;在事件冒泡阶段,子级元素的事件处理程序会先于父级元素的事件处理程序执行
  3. 默认阶段:大多数事件处理程序默认情况下在事件冒泡阶段触发,因此它们通常在事件冒泡阶段被执行。但是,可以使用addEventListener的第三个参数来指定事件是在事件捕获阶段还是事件冒泡阶段处理

事件委托 - 利用事件冒泡机制

事件委托:事件委托是利用事件冒泡原理实现的,就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素

事件委托应用场景

  • 为DOM中的很多元素绑定相同的事件
  • 为DOM中尚不存在的元素绑定事件

使用事件委托时,如果注册到目标元素上的其他事件处理程序使用了.stopPropagetion()阻止了事件传播,那么事件委托就会失效

支持事件委托的事件

  • 支持:click、mousedown、mouseup、keydown、keyup、keypress、change
  • 不支持:focus、blur

事件委托的优缺点

优点:

  • 减少事件注册,节省内存
  • 简化了dom节点更新时,相应事件的更新,比如:不用在新添加的 li 上绑定 click 事件,当删除某个 li 时,不用解绑上面的click事件

缺点:

  • 事件委托基于冒泡,对于不冒泡的事件不支持
  • 层级过多,冒泡过程中,可能会被某层阻止掉
  • 理论上委托会导致浏览器频繁调用处理函数,所以建议就近委托,比如在table上代理td,而不是在document上代理td
  • 把所有事件都用代理可能会出现事件误判

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器报错内容:Provisional headers are shown

浏览器报错内容:Provisional headers are shown 如下图: 解决方法:nginx 443 启用HTTP/2模式,如下图: server {listen 443 ssl http2;server_name callcenterda.umworks.com;client_max_body_size 200M;ssl_session_…

死锁详细解读

目录 死锁(1) 一、死锁的定义 二、产生死锁的原因 三、产生死锁的四个必要条件 四、解决死锁的方法 死锁(2) 第三节 死锁避免 一、死锁避免的概念 二、安全状态与安全序列 三、银行家算法 第四节、死锁的检测与解除 …

Python 打印所有水仙花数

"""打印三位水仙花数介绍:水仙花数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个三位的水仙花数,因为 (1**3) (5**3) (3**3) 153。下面是一个 Python 程序,用于生成…

LabVIEW开发基于物联网的多功能功率分析仪

LabVIEW开发基于物联网的多功能功率分析仪 根据技术规则,电气元件网络中的单个被创建为在标称正弦波振动制造频率下运行。失真顺序的电流和电压波与正弦波不同,它们或多或少地扭曲成形状。它是由交流网络中非线性组件的存在引起的,例如静态转…

32:TX Text Control ActiveX/ASP.NET/WinForms/WPF Crack

TX Text Control ActiveX 32.0 添加操作“普通”样式表的能力。 2023 年 9 月 14 日 - 15:38新版本 特征 脚注- 在文档中插入与 Microsoft Word 兼容的脚注。脚注是一种文字处理功能,允许用户在页面底部插入附加信息。 可编辑的[普通]样式表- 添加了操作[普通]样式的…

为什么tomcat要自定义线程池实现?

背景 最近在研究tomcat调优的问题,开发人员做过的最多的tomcat调优想必就是线程池调优了,但是tomcat并没有使用jdk自己的线程池实现,而是自定了了线程池,自己实现了ThreadPoolExecutor类位于org.apache.tomcat.util.threads包下 …

TikTok的全球影响:跨文化、跨国界的短视频文化

随着TikTok的崛起,短视频文化正在以前所未有的方式迅速传播,跨足了不同国家和文化的边界。本文将探讨TikTok的全球影响,以及它如何促进了跨文化交流和文化融合。 短视频:跨越语言和文化的沟通工具 TikTok的短视频格式具有独特的跨…

步步为营,如何将GOlang引用库的安全漏洞修干净

文章目录 引场景构建第一步、直接引用的第三方库升级修复策略1.确认是否为直接引用的第三方库2.找到需要升级的版本是否为release版本 第二步、间接引用的第三方库升级修复策略那么问题来了,我们这么间接引用库的对应的直接引用库是哪个呢? (…

Vue构建SPA项目实现路由

目录 前言 一、Vue CLI简介 1.什么是Vue CLI 2.Vue CLI的特点 二、SPA项目搭建 1.安装Vue CLI 2.使用脚手架vue-cli来构建项目 ​编辑 3.项目结构说明 4.什么是*.vue文件 三、基于SPA完成路由并嵌套路由 1.基于SPA完成路由 1. 1在src下的components 创建自定义组件…

vue项目升级webpack

vue项目升级webpack 目录 1. vue项目中影响webpack版本的是什么 2.理解package.json中库前缀^和~区别 3.升级webpack4到5操作 1. vue项目中影响webpack版本的是什么 答案是:vue/cli-service版本 2.理解package.json中库前缀^和~区别 x.y.z x代表大版本&#xf…

Spark-3.2.4 高可用集群安装部署详细图文教程

目录 一、Spark 环境搭建-Local 1.1 服务器环境 1.2 基本原理 1.2.1 Local 下的角色分布 1.3 搭建 1.3.1 安装 Anaconda 1.3.1.1 添加国内阿里源 1.3.2 创建 pyspark 环境 1.3.3 安装 spark 1.3.4 添加环境变量 1.3.5 启动 spark 1.3.5.1 bin/pyspark 1.…

vue2中年份季度选择器(需要安装element)

调用 <!--父组件调用--><QuarterCom v-model"quart" clearable default-current/> 组件代码 <template><div><span style"margin-right: 10px">{{ label }}</span><markstyle"position:fixed;top:0;bottom:0…

EPLAN_001#常用功能(一)

一、栅格设置、背景颜色设置 二、插入设备图标&#xff08;快捷键 Insert&#xff09; 按TAB旋转方向 三、 通过左CTRLENTER输入 四、移动属性文本、复制格式 CTRLB 可以移动设备图形中的相关文本&#xff08;或者右键—文本—移动属性文本&#xff09; 很对多个文本的&#xf…

干货 | 汽车行业研发效能提升的挑战与实践案例

在 9 月 15 日的第七届 CSN 大会上&#xff0c;思码逸研发效能专家王艳萍受邀分享了《汽车行业研发效能提升的挑战与实践案例》。演讲包含了思码逸对多家汽车企业服务过程中总结出的行业痛点、解决方案&#xff0c;以及实践案例。 以下为演讲实录&#xff1a; 思码逸与很多知名…

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述 需求是想在线程池执行任务的时候&#xff0c;在开始前将调用线程的信息传到子线程中&#xff0c;在子线程完成后&#xff0c;再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…

Python实现MYSQL蜜罐

1 LOAD DATA INFILE介绍 首先开启一个Mysql&#xff0c;看一下mysql是如何读取主机文件的。 1.1 linux搭建mysql 1&#xff09;docker运行mysql 2&#xff09;启动Mysql docker run -itd…

【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效

文章目录 前言1. 取消 输入法的快捷键&#xff08;推荐使用&#xff09;2.更改 idea的快捷键3. 热键占用总结 前言 当你发现在idea 中看到用于全局搜索的快捷键就是 CtrlshiftF&#xff0c;可是怎么按都不管用的时候&#xff0c;你就不要再执着于自己的操作继续狂点电脑按键了…

Lnmp架构之mysql数据库实战1

1、mysql数据库编译 编译成功 2、mysql数据库初始化 配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是mysql的主从复制&#xff1f; MySQL的主从复制是一种常见的数据库复制技术&#xff0c;用于将一个数据库服务器&#xff08;称为主…

解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose

参考&#xff1a;Docker官网-Install Docker Engine on Ubuntu 虚拟机里安装ubuntu-23.04-beta-desktop-amd64&#xff0c;开启SSH(换源、备份)&#xff0c;配置中文以及中文输入法等 基于CentOS7安装配置docker与docker-compose 一、 Install using the Apt repository 1.…

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant&#xff1a;线性变换对应的矩阵依赖于所选择的基。 一般情况下&#xff0c;同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例&#xff0c;Grant 选用标准坐标系下的基向量 i…