JavaScript事件流

news2024/9/29 13:44:36

一、事件流和它的两个阶段

1.事件流:是事件完整执行过程中的流动路径
在这里插入图片描述
2.说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段
(1)捕获:从父到子
(2)冒泡:从子到父
实际开发都是使用事件冒泡为主

二、事件捕获

了解事件捕获执行过程
1.事件捕获概念:
从DOM的根元素开始去执行对应的事件(从外到里)
2.语法:

  DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)

3.说明:
(1)addEventListener第三个参数传入true代表是捕获阶段触发(很少使用)
(2)若传入false代表冒泡阶段触发,默认就是false
(3)若是传统on事件监听,则只有冒泡阶段,没有捕获

 <style>
     .father{
         width: 200px;
         height: 200px;
         background-color: pink;
     }
     .son{
         width: 20px;
         height: 20px;
         background-color: purple;
     }
 </style>

<div class="father">
   <div class="son"></div>
</div>

//第一种
const fa = document.querySelector('.father')
const son = document.querySelector('.son')
// 事件捕获
document.addEventListener('click',function(){
         alert('我是爷爷')
     },true)
     fa.addEventListener('click',function(){
         alert('我是爸爸')
     },true)
     son.addEventListener('click',function(){
         alert('我是儿子')
     },true)


//on
 //第二种
 <script>
    const fa = document.querySelector('.father')
    const son = document.querySelector('.son')
    // 事件捕获
     fa.onclick = function(){
        alert('我是爸爸')
     }
     son.onclick = function(){
        alert('我是儿子')
     }
 </script>

三、事件冒泡

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

<div class="father">
    <div class="son"></div>
</div>

 //冒泡
 const fa1 = document.querySelector('.father')
 const son1 = document.querySelector('.son')
 // 事件捕获
 document.addEventListener('click',function(){
     alert('我是爷爷')
 })
 fa1.addEventListener('click',function(){
     alert('我是爸爸')
 })
 son1.addEventListener('click',function(){
     alert('我是儿子')
 })

四、阻止冒泡

1.问题:因为默认就有冒泡模式的存在,所以容易导致事件影响到父级元素
2.需求:若想把事件就限制在当前元素内,就需要阻止事件冒泡
3.前提:阻止事件冒泡需要拿到事件对象
4.语法:

事件对象.stopPropagation()

注意:此方法可以阻断事件流动传播,不光在冒泡阶段,捕获阶段也有效

//冒泡
const fa1 = document.querySelector('.father')
const son1 = document.querySelector('.son')
// 事件捕获
document.addEventListener('click',function(){
    alert('我是爷爷')
})
fa1.addEventListener('click',function(){
    alert('我是爸爸')
})
son1.addEventListener('click',function(e){
    alert('我是儿子')

    //阻止流动传播  事件对象.stopPropagation()
    e.stopPropagation()
})

五、解绑事件

1.on事件方式,直接使用null覆盖就可以实现事件的解绑
语法:

<button>点击</button>
    
<script>
    const btn = document.querySelector('button')
    //第一种:
    // 绑定事件
    btn.onclick = function(){
        alert('点击了')
    }
    //解绑事件
    btn.onclick = null
</script>

2.addEventListener方式,必须使用:
removeEventListener(事件类型,事件处理函数,[获取捕获或者冒泡阶段])
第三个参数可省略

//第二种
function fn(){
    alert('点击了')
}
//绑定事件
btn.addEventListener('click',fn)
//解绑事件
btn.removeEventListener('click',fn)

ps:匿名函数无法被解绑

六、鼠标经过事件的区别:

鼠标经过事件:
mouseover和mouseout会有冒泡效果
mouseenter和mouseleave没有冒泡效果(更常用)

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

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

相关文章

测试工程师都是怎么写测试用例的?​

很多人不知道写测试用例有什么用&#xff0c;而仅仅是像工具人一样&#xff0c;在每次提测之前&#xff0c;把测试用例照着需求文档抄一遍&#xff0c;仿佛像是走个过场。 开发提测之后&#xff0c;就照着测试用例点点点&#xff0c;可能一天就走完用例了&#xff0c;开发代码…

最优化理论-线性规划中的大M法的步骤

目录&#xff1a; 一、引言 二、线性规划的基本概念 三、最优化理论中的大M法 1. 大M法的基本思想 2. 大M法的步骤 3. 大M法的优缺点 四、大M法的应用 1. 生产计划问题 2. 运输问题 3. 投资问题 五、总结 一、引言 最优化理论是数学中的一个重要分支…

【2023/05/19】NFA

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第14天。 非确定有限状态自动机&#xff08;NFA&#xff09;是一种模拟复杂系统行为的数学模型 目录 一、基本概念和理论 二、优点和缺点 三、应用场景 四、问题和挑战 五、重要性、作用和使用价值 …

学习HCIP的day.07

目录 7、SPF算法 --- OSPF防环机制 OSPF区域间防环 OSPF域外防环 基于以上长篇理论总结&#xff1a; 7、SPF算法 --- OSPF防环机制 &#xff08;1&#xff09;在同一个区域每台路由具有一致的LSDB &#xff08;2&#xff09;每台路由器以自己为根计算到达每个目标的最短路…

Java泛型,数组和方法返回类型 - 协变,逆变和不变

首先&#xff0c;让我们通常理解一下子类型规则是什么。 协变vs逆变vs双变vs不变 编程语言可能有支持以下子类型规则的特性&#xff1a; 协变 允许用超类型替换子类型。 逆变 允许用子类型替换超类型。 双变 同时是协变和逆变。 不变 不允许上述任何替换。 让我们看看Java支持哪…

Intellij IDEA 如何删掉插件

在 Intellij IDEA 的配置中&#xff0c;找到插件选项。 在插件选项中&#xff0c;选择需要删除的插件&#xff0c;然后在右侧的对话框中选择 uninstall 就可以了。 卸载以后&#xff0c;可能不会要求重启&#xff0c;为了安全起见&#xff0c;还是重启下你的 IDE 吧。

C++容器详解

什么是容器 首先&#xff0c;我们必须理解一下什么是容器&#xff0c;在C 中容器被定义为&#xff1a;在数据存储上&#xff0c;有一种对象类型&#xff0c;它可以持有其它对象或指向其它对像的指针&#xff0c;这种对象类型就叫做容器。很简单&#xff0c;容器就是保存其它对…

Flutter控件之文本Text封装

Flutter控件之基类Widget封装 上篇文章&#xff0c;我们简单针对Widget做了一个基类封装&#xff0c;拓展出了很多常见又易用的属性&#xff0c;比如宽高&#xff0c;内外边距等等&#xff0c;很方便的为接下来的各个基础组件的封装&#xff0c;提供极大的便利&#xff0c;在上…

虚拟机启动时出现“已启用侧通道缓解”的解决方法

系列文章目录 Hypervisor launch failed centos7配置ssh免密登陆完成&#xff0c;进行ssh登陆时出现”代理承认未能使用密钥签名“ 解决pip更新的代码 文章目录 系列文章目录 一、问题描述 二、启用了侧通道缓解的虚拟机可能会出现性能下降 &#xff08;79832&#xff0…

Linux系统vim查看文件中文乱码

Linux系统查看文件-cat中文正常显示 vim中文乱码 1、背景2、环境3、目的4、原因5、操作步骤5.1、修改vim编码配置 6、验证 1、背景 服务器部署业务过程中查看文件内容&#xff0c;使用cat 命令查看中文正常显示&#xff0c;使用vim命令查看显示中文乱码 cat 查看 vim 查看 …

陶哲轩宣布主持白宫生成式AI工作组,李飞飞、Hassabis发表演讲

来源 | 新智源 ID | AI-era 【导读】最近&#xff0c;「数学天才」陶哲轩表示&#xff0c;自己将领导白宫生成式人工智能工作组&#xff0c;就当前AI评估并收集意见。在陶哲轩看来&#xff0c;加入工作流的ChatGPT在数学专业领域中&#xff0c;并没有太多增值。 近来&#xf…

Redis主从复制、哨兵、cluster集群原理+实验

Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台Redis服务…

Fluent局部坐标系(曲线坐标系)

1 概述 在某些模型中&#xff0c;利用局部坐标系可极大的方便模型设置&#xff0c;例如对弯曲的多孔板设置多孔介质属性、设置各向异性的材料属性等。 2 创建坐标系 通过树状菜单中“curvilinear coordinate system”可创建曲线型局部坐标系。 右键点击“新建”&#xff0c;在如…

Linux 安装redis

一、概述 官网&#xff1a;https://redis.io/ Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保持在磁盘…

基于静态和动态特征融合的语音情感识别层次网络

题目Hierarchical Network based on the Fusion of Static and Dynamic Features for Speech Emotion Recognition时间2021年期刊\会议ICASSP 基于静态和动态特征融合的语音情感识别层次网络 摘要&#xff1a;许多关于自动语音情感识别&#xff08;SER&#xff09;的研究都致…

【集群划分】基于kmeans的电压调节的集群划分【IEEE33节点】

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HTTP/HTTPS协议详解

目录 一. HTTP详解 ✅1.1 概念 ✅1.2 HTTP的协议格式 1.2.1 HTTP请求体格式&#xff1a; 1.2.2 HTTP响应体格式&#xff1a; ✅1.3 HTTP请求方法 ✅1.4 认识请求报头 ✅1.5 HTTP请求过程 ✅1.6 认识状态码 二. HTTPS详解 ✅2.1 HTTPS简介 ✅2.2 HTTPS加密过程 TCP/UDP是位于传…

d3d(Direct X)中的com技术详解

本文不会对Com进行非常详细的分析 因为这个技术分析起来难度还是非常大的 要想真正弄懂还是非常困难的 我只会针对d3d中使用到的com技术和comptr技术进行说明 所以看完本文后 可以熟练使用d3d中使用到的相应技术 comptr类似于c11中的智能指针,用于管理com对象的生命周期,所以我…

深度学习基础篇之卷积神经网络(CNN)

一、CNN的基本结构 首先我们来看CNN的解百纳结构&#xff0c;一个常见的图像识别CNN模型如下图&#xff1a; 从图中可以看出最左边的图像就是模型的输入层&#xff0c;在计算机中就是若干个矩阵&#xff0c;这点与DNN类似。 接着是卷积层&#xff08;Convolution Layer&…

rtmp协议

目录 1 rtmp格式 2 header 3 chunk data 1 rtmp格式 Real Time Messaging Protocol&#xff08;实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 在RTMP协议中信令和媒体数据都称之为Message&#xff0c;包含Mess…