js 事件流、事件冒泡、事件捕获、阻止事件的传播

事件流

js 事件的执行过程分为捕获阶段(由外层节点传播到内层节点)和冒泡阶段(由内层节点传播到外层节点),即先执行捕获阶段的代码,后执行冒泡阶段的代码

事件冒泡

js 事件中的代码默认在冒泡阶段执行,以下图为例,点击box2时,会依次触发box2的点击事件【冒泡阶段执行】、box1的点击事件【冒泡阶段执行】、window的点击事件【冒泡阶段执行】。
在这里插入图片描述

  window.addEventListener("click", function (e) {if (e.target.id === "box2") {console.log("点击box2触发window的click事件");} else if (e.target.id === "box1") {console.log("点击box1触发window的click事件");} else {console.log("触发了window的click事件");}});document.getElementById("box1").addEventListener("click", function (e) {console.log("触发了box1的click事件");});document.getElementById("box2").addEventListener("click", function (e) {console.log("触发了box2的click事件");});

在这里插入图片描述

事件捕获

给 addEventListener 函数的第三个参数传入 true ,便会将事件中的代码改为在捕获阶段执行,此时点击box2时,会依次触发window的点击事件【捕获阶段执行】,box2的点击事件【冒泡阶段执行】,box1的点击事件【冒泡阶段执行】。

  window.addEventListener("click",function (e) {if (e.target.id === "box2") {console.log("点击box2触发window的click事件");} else if (e.target.id === "box1") {console.log("点击box1触发window的click事件");} else {console.log("触发了window的click事件");}},//改为在捕获阶段执行true);document.getElementById("box1").addEventListener("click", function (e) {console.log("触发了box1的click事件");});document.getElementById("box2").addEventListener("click", function (e) {console.log("触发了box2的click事件");});

在这里插入图片描述

阻止事件的传播

使用

e.stopPropagation()

范例:点击box2时,只触发box2的点击事件,不触发box1和window的点击事件

  window.addEventListener("click", function (e) {if (e.target.id === "box2") {console.log("点击box2触发window的click事件");} else if (e.target.id === "box1") {console.log("点击box1触发window的click事件");} else {console.log("触发了window的click事件");}});document.getElementById("box1").addEventListener("click", function (e) {console.log("触发了box1的click事件");});document.getElementById("box2").addEventListener("click", function (e) {console.log("触发了box2的click事件");// 阻止事件继续传播e.stopPropagation();});

实战范例

需求:

  1. 点击box2时,只执行window点击事件中通过点击box2触发window点击事件的代码,不执行box1的点击事件代码
  2. 点击box1时,只执行box1的点击事件代码,不执行window点击事件中通过点击box1触发window点击事件的代码
  window.addEventListener("click",function (e) {if (e.target.id === "box2") {console.log("点击box2触发window的click事件");// 阻止事件继续传播e.stopPropagation();} else if (e.target.id === "box1") {return;console.log("点击box1触发window的click事件");} else {console.log("触发了window的click事件");}},true);document.getElementById("box1").addEventListener("click", function (e) {console.log("触发了box1的click事件");});document.getElementById("box2").addEventListener("click", function (e) {console.log("触发了box2的click事件");});

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

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

相关文章

【计组】计算机系统体系结构

【计组】计算机系统体系结构 文章目录 【计组】计算机系统体系结构1、体系的发展与思维变化1.1 计算机发展1.2 冯诺依曼体系 2、计算机系统2.1 CPU2.2 存储层次2.2.1 寄存器2.2.2 高速缓存(Cache)2.2.3 动态随机访问存储器(DRAM)2…

优化Cache机制,提升CPU性能

目录 CPU性能提升方式 CPU和Cache交互流程 Cache机制 优化Cache机制 CPU性能提升方式 CPU性能提升可以通过多种方式实现,以下是一些常见的方式: 增加CPU核心数:多核心处理器可以同时处理多个任务,从而提高CPU的处理能力。 提…

自动化发布npm包小记

1.注册npm账号 打开npm官网,并注册自己的npm账号 2.申请AccessToken 1.登录npm官网,登录成功后,点开右上角头像,并点击Access Tokens选项 2.点开Generate New Token下拉框,点击Classic Token(和Granular Access To…

CCF会议期刊(软件工程/系统软件/程序设计语言)

中国计算机学会推荐国际学术会议 1PLDIACM SIGPLAN Conference on Programming Language Design & ImplementationA会议软件工程/系统软件/程序设计语言2POPLACM SIGPLAN-SIGACT Symposium on Principles of Programming LanguagesA会议软件工程/系统软件/程序设计语言3FS…

VS2019创建GIt仓库时剔除文件或目录

假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”,选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore,直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…

轻松自定义文件,悦享文件管理与格式转换!

大家好!厌倦了繁琐的文件命名和格式转换过程吗?现在,我们为您推出一款智能文件管理工具,让您能够轻松自定义文件改名,并将视频文件格式转换为MP3,让您的文件管理更加高效便捷! 首先&#xff0c…

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么? 2.2 Redis读写是单线程为何这么快? 2.3 Redis如何处理并发操作命令? 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

java图片转pdf ,pdf 导出

pom引入jar <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency> 转pdf方法 /*** 使用pdfbox将jpg转成pdf** throws IOException IOException*/pu…

.Net IDE智能提示汉化(.Net6、AspNetCore)

先上现成的.net6汉化文件&#xff0c;可以手动下载后参照 如何为 .NET 安装本地化的 IntelliSense 文件 进行安装。或者使用后文的工具进行自动安装。 无对照英文在前中文在前 汉化内容来自 官方在线文档 &#xff0c;某些内容可能存在明显的机翻痕迹。 上一些效果图&#x…

c语言基础知识+OS+数据结构

c语言&#xff1a; memory section&#xff1a; .bss&#xff1a; uninitialized or zero-initialized global and static variables .data: initialized global and static variables .text: Read only, code and const C语言编译流程&#xff1a; pre-compiler: …

快速安装和测试混淆后的IPA文件:使用Ipa Guard的签名和安装功能

​ 目录 转载&#xff1a;怎么保护苹果手机移动应用程序ipa中文件安全&#xff1f; 前言 1. 对敏感文件进行文件名称混淆 ​编辑 2. 更改文件的MD5值 3. 增加不可见水印处理 3. 对html&#xff0c;js&#xff0c;css等资源进行压缩 5. 删除可执行文件中的调试信息 转载&…

kubesphere中间件部署

微服务部署前中间件部署 一、MySQL部署 1.1 使用Docker实现MySQL主从复制 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql/master/log:/var/log/mysql \ -v /mydata/mysql/master/data:/var/lib/mysql \ -v /mydata/mysql/master/conf:/etc/mysql \ -e My…

企业架构LNMP学习笔记59

目录介绍&#xff1a; bin&#xff1a;存放的是启动和关闭tomcat的脚本文件&#xff1b; conf&#xff1a;存放tomcat服务器的各种全局配置文件&#xff0c;其中最重要的是server.xml和web.xml lib: 存放的是tomcat服务器所需要的各种jar文件。java打包类库。 logs&#xff…

Vue项目前端代码防止被调试

项目背景 被安全测试针对了&#xff0c;总是调试我这不太安全的代码。前端代码深度混淆转成十六进制还不行&#xff0c;仍然找到加密方法&#xff0c;对后端数据进行解密。这次就修改了思路换种方法: 我承认阁下很强&#xff0c;但假如, 我是说假如打开控制台是空白页面&…

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara 目录 OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无) 80-HT…

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章思路来自振动测试与诊断期刊的一篇三高论文&#xff0c;点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g 文章摘要如下&#xff1a; 针对风机滚动轴…

在qml中将一个16进制表示的颜色加上透明度

在qml中&#xff0c;我们在指定控件的颜色时&#xff0c;可以直接通过16进制的字符串来表示&#xff0c;比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上&#xff0c;加个透明度的话&#xff0c;就要重新计算一番&#xff0c;比…

【iOS逆向与安全】插件开发之某音App直播间自动发666

1.目标 由于看直播的时候主播叫我发 666&#xff0c;支持他&#xff0c;我肯定支持他呀&#xff0c;就一直发&#xff0c;可是后来发现太浪费时间了&#xff0c;能不能做一个直播间自动发 666 呢&#xff1f;于是就花了几分钟做了一个。 2.操作环境 越狱iPhone一台 frida ma…

c++ 纯虚函数、抽象类

一、 纯虚函数 抽象类 只要有一个纯虚函数&#xff0c;这个类称为抽象类 抽象类的特点 1、无法实例化 2、抽象类的子类&#xff0c;必须要重写父类中的纯虚函数&#xff0c;否者也属于抽象类 例子一 #include <iostream> #include <string.h> using namespa…

tensorflow cuda gpu 安装

Windows 安装 CUDA/cuDNN 需要注意的是一定要选择 TensorFlow 和 CUDA相匹配&#xff0c;还需要查看下自己GPU的驱动版本&#xff0c;如果不匹配会出现很多问题。GPU驱动的版本可在 NVIDIA控制面板里找到&#xff1a; CUDA个版本与驱动的关系如下&#xff1a; GPU版本的 Tensor…