day21 事件流、事件捕获、事件冒泡、阻止冒泡、解绑事件

目录

      • 事件流
        • 总结:
      • 事件捕获
        • 示例:
      • 事件冒泡
      • 阻止冒泡(阻断事件流动传播,不止在冒泡阶段有效,捕获阶段也有效)
      • 解绑事件
      • 鼠标经过事件的区别:

事件流

  • 事件流指的是事件完整执行过程中的流动路径。

  • 事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。

  • 任意事件被触发时总会经历两个阶段:捕获阶段冒泡阶段

简言之,捕获阶段是从父到子的传导过程,冒泡阶段是从子向父的传导过程。

  • 结合事件流的特征,我们知道当某个元素的事件被触发时,事件总是会先经过其祖先才能到达当前元素,然后再由当前元素向祖先传递,事件在流动的过程中遇到相同的事件便会被触发。

  • 事件的执行顺序是可控制的,即可以在捕获阶段被执行,也可以在冒泡阶段被执行。

  • 如果事件是在冒泡阶段执行的,我们称为冒泡模式,它会先执行子盒子事件再去执行父盒子事件,默认是冒泡模式。

  • 如果事件是在捕获阶段执行的,我们称为捕获模式,它会先执行父盒子事件再去执行子盒子事件。

总结:
  1. addEventListener 第3个参数决定了事件是在捕获阶段触发还是在冒泡阶段触发
  2. addEventListener 第3个参数为 true 表示捕获阶段触发,false 表示冒泡阶段触发,默认值为 false
  3. 事件流只会在父子元素具有相同事件类型时才会产生影响
  4. 绝大部分场景都采用默认的冒泡模式(其中一个原因是早期 IE 不支持捕获)

事件捕获

  • 概念:从DOM的根元素开始去执行对应的事件(从外到里)
  • 事件捕获需要对应代码才能看到效果
  • 代码:DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  • 说明:
    • addEventListener第三个参数传入ture代表是捕获阶段触发(很少使用)
    • 若传入false代表冒泡阶段触发,默认false
示例:

点击son的盒子部分,会依次显示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<div class="father"><div class="son"></div></div><script>const fa = document.querySelector('.father')const son = document.querySelector('.son')document.addEventListener('click', function () {alert('grandpa')}, true)fa.addEventListener('click', function () {alert('father')}, true)son.addEventListener('click', function () {alert('son')}, true)</script>
<style>.father {width: 300px;height: 200px;background-color: aquamarine;}.son {width: 100px;height: 50px;background-color: bisque;}</style>

事件冒泡

  • 概念:当一个元素的事件被触发时,同样的事件会在该元素的所有祖先元素中依次触发。
    即:当一个元素触发事件后,会依次向上调用所有父级元素的同名事件
  • 事件冒泡是默认存在的
  • L2事件监听第三个参数是false,或者默认都是冒泡

案例只要把上面事件捕获代码的true删除就行。

阻止冒泡(阻断事件流动传播,不止在冒泡阶段有效,捕获阶段也有效)

  • 前提:阻止事件冒泡需要拿到事件对象
  • 语法:事件对象.stopPropagation()
  • 此方法可以阻断事件流动传播,不止在冒泡阶段有效,捕获阶段也有效
son.addEventListener('click', function (e) {alert('son')// 阻止流动传播e.stopPropagation()})

解绑事件

  • on事件方式,直接使用null覆盖就可以实现
<button>click</button>
<script>const btn=document.querySelector('button')btn.onclick=function(){alert('click')btn.onclick=null}
</script>
  • addEventListener方式,必须使用:
    removeEventListener(事件类型,事件处理函数,[获取捕获或者冒泡阶段])
    []代表可以省略

注意:匿名函数无法被解绑

<button>click</button><script>const btn = document.querySelector('button')function fn() {alert('click')}btn.addEventListener('click', fn)// L2事件移除btn.removeEventListener('click', fn)

鼠标经过事件的区别:

  • mouseovermouseout 会有冒泡效果
  • mouseentermouseleave 没有冒泡效果 (推荐)

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

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

相关文章

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01&#xff1a; 项目1 数据采集与预处理准备 任务1 认识数据采集技术&#xff0c;熟悉数据采集平台 数据采集&#xff1a;足够的数据量是企业大数据战略建设的基础&#xff0c;因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

WordPress你好多莉插件(Hello Dolly)有什么用?如何修改展示内容?

每次我们成功搭建好WordPress网站后&#xff0c;都可以在后台 >> 插件 >> 已安装的插件&#xff0c;在插件列表中可以看到有一个“你好多莉”的插件&#xff08;英文插件Hello Dolly&#xff09;。具体如下图所示&#xff1a; 那么这个你好多莉插件到底有什么用呢&…

基于springboot+vue的古典舞在线交流平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…

直播核心岗位基础内容

一.直播间核心岗位 1.直播间前端岗位 前端岗位分工 &#xff08;1&#xff09;主播岗位职责 &#xff08;2&#xff09;场控岗位职责 &#xff08;3&#xff09;助理岗位职责 中端岗位分工 &#xff08;1&#xff09;运营岗位职责 &#xff08;2&#xff09;中控岗位职责 …

Centos7安装python3.7.13以及pip23.3.2

拿到机器发现只有自带的python2.X&#xff0c;但是算法cplex求解器需要用到Python3.7&#xff0c;安装过程遇到一些问题&#xff0c;记录下来&#xff1a; 如果需要卸载python3 1、卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 2、 删除所有残余…

三维柔性焊接平台怎样来安装支架的(河北北重)

安装支架是安装三维柔性焊接平台的重要部分&#xff0c;它提供平台稳定的支撑结构。下面是安装支架的一般步骤&#xff1a; 确定支架的位置&#xff1a;根据焊接平台的尺寸和工作区域的要求&#xff0c;确定支架的安装位置。 准备安装材料&#xff1a;根据支架的设计和要求&am…

整数反转算法(leetcode第7题)

题目描述&#xff1a; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。示例 1…

如何用GPT快速写论文?

详情点击链接&#xff1a;如何用GPT快速写论文&#xff1f; 第一&#xff1a;2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二&#xff1a;Op…

kafka生产者与消费者

文章目录 一、 pom.xml依赖包二、yml配置文件三、消费者四、生产者总结 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 一、 pom.xml依赖包 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka<…

Java实战:轻松掌握文件重命名与路径提取技巧

目录 一、使用File类进行文件重命名应用场景1&#xff1a;文件上传到服务器后保持原有文件名 二、从字符串中提取文件路径应用场景2&#xff1a;只获取不带http前缀的文件路径url应用场景3&#xff1a;获取文件路径url下的其他文件 三、解决反斜杠字符的问题应用场景4&#xff…

如何提高图片分辨率?3个方法让图片秒变清晰

如何提高图片分辨率&#xff1f;在日常生活中&#xff0c;我们经常需要处理各种图片。有时候&#xff0c;这些图片的分辨率可能比较低&#xff0c;导致无法满足我们的需求。例如&#xff0c;当我们想将图片放大或裁剪时&#xff0c;低分辨率的图片可能会出现模糊、失真等问题。…

计算机网络 第6章(应用层)

系列文章目录 计算机网络 第1章&#xff08;概述&#xff09; 计算机网络 第2章&#xff08;物理层&#xff09; 计算机网络 第3章&#xff08;数据链路层&#xff09; 计算机网络 第4章&#xff08;网络层&#xff09; 计算机网络 第5章&#xff08;运输层&#xff09; 计算机…

基于springboot+vue的新闻推荐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

常用电子器件学习——光耦

光耦介绍 光耦合器一般由三部分组成&#xff1a;光的发射、光的接收及信号放大。 输入的电信号驱动光发射源&#xff0c;使之发光&#xff0c;被光探测器接收而产生光电流&#xff0c;再经过进一步放大后输出。这就完成了电—光—电的转换&#xff0c;从而起到输入、输出、隔离…

Unity开发中的XML注释

在Unity开发中&#xff0c;XML注释主要用于C#脚本的注释&#xff0c;以帮助生成代码文档和提供IntelliSense功能。以下是一些关于如何使用XML注释的技巧&#xff1a; 创建注释&#xff1a; 在C#中&#xff0c;XML注释是由///或/**...*/开始的。例如 /// <summary> /// 这…

刘润-进化的力量2 一刷 笔记

安全感来自确定性&#xff0c;但机会藏在不确定性中 安全感来自确定性&#xff0c;但机会藏在不确定性中。 每一个弯道里&#xff0c;都有你超车的机会 意外、周期、趋势、规划 可是&#xff0c;为什么趋势一定是不可逆转的呢&#xff1f;因为&#xff0c;效率提高了 长期…

配置接口策略路由案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OCP\CKA\K8S\…

【Image captioning】论文阅读七—Efficient Image Captioning for Edge Devices_AAAI2023

中文标题:面向边缘设备的高效图像描述(Efficient Image Captioning for Edge Devices) 文章目录 1. 引言2. 相关工作3. 方法3.1 Model Architecture(模型结构)3.2 Model Training (模型训练)3.3 Knowledge Distillation (知识蒸馏)4. 实验4.1 数据集和评价指标4.2 实施细…

c++中 cin中的hello world 也有需要注意的事情

文章目录 一个demo先看一段代码思考一下看一下结果 输入cincin.get()先看一段代码思考一下看一下结果解决办法cin.getline() 一个demo 在std命名空间中的cin属于标准输入了。 先看一段代码 char yourname[50];cout << "请输入你的姓名" << endl; cin.g…