返回顶部
首页 > 资讯 > 前端开发 > JavaScript >一起来学习一下JavaScript的事件流
  • 286
分享到

一起来学习一下JavaScript的事件流

2024-04-02 19:04:59 286人浏览 泡泡鱼
摘要

目录1. 什么是事件流?2. 事件流模型2.1)事件冒泡2.2)事件捕获3. DOM事件流总结1. 什么是事件流 ? 在学习事件流之前我们先看

1. 什么是事件流 ?

学习事件流之前我们先看看什么是事件 ?

事件代表文档或浏览器窗口中某个有意义的时刻

即用户与页面的交互动作

(如用户点击元素时,鼠标移动到某个元素上等等)

事件的作用

javascript 与 html 的交互就是通过事件实现的

那么事件流是什么呢 ?

页面接受事件的顺序

2. 事件流模型

2.1) 事件冒泡

事件被定义为从最具体的元素(DOM 树的叶子)开始触发,然后向上传播至没有那么具体的元素(DOM 树的根节点)

通过一个例子理解一下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta Http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件冒泡</title>
</head>
<body>
    <div>点击</div>
</body>
</html>

当点击 <div> 元素后,会触发 click 事件;

然后 click 事件沿 DOM 树一路向上,在经过的结点依次触发,直至 document

即 <div> —> <body> —> <html> —> document

可以通过下图来理解一下:

在这里插入图片描述

2.2) 事件捕获

从最不具体的节点(DOM 树的根节点)最先收到事件,而最具体的节点(DOM 树的叶子 )应该最后收到事件

通过一个例子来理解一下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件捕获</title>
</head>
<body>
    <div>点击</div>
</body>
</html>

在点击 <div> 后, click 事件首先由 document 捕获;

然后沿 DOM 树一路向下传播,直至达到目标元素 <div>

即 document —> <html> —> <body> —> <div>

通过下图来理解一下:

在这里插入图片描述

根据它的特点,它有着如下作用:

在事件达到最终目标前拦截事件

Tips:

由于一些旧版本浏览器不支持事件捕获,通常建议使用事件冒泡。

3. DOM 事件流

DOM2 Events 规定事件流分为 3 个阶段:

事件捕获、达到目标和事件冒泡

事件捕获最先发生,为提前拦截事件提供了可能,然后实际的目标元素接受到了事件,最后事件冒泡(最迟要在这个阶段响应事件)

通过一个例子理解一下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM 事件流</title>
</head>
<body>
    <div>点击</div>
</body>
</html>

点击<div> 元素后,以如下图所示的顺序触发事件

在这里插入图片描述

在 DOM 事件流中,实际的目标元素在捕获阶段不会接收到事件(捕获阶段从 document 到 <body> 就结束了)。

  • 捕获阶段: document —> <html> —> <body> 即图中的 1, 2, 3;
  • 达到目标:即在 <div> 上触发事件,即图中的 4 (通常在事件处理时,被认为是冒泡阶段的一部分);
  • 冒泡阶段:<body> —> <html> —> document 即图中的 5, 6, 7;

Tips:

虽然 DOM2 Events 规范明确捕获阶段不命中目标事件,但现代浏览器都会在捕获阶段在事件目标上触发事件。所以,在事件目标上有两个机会来处理事件。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!    

--结束END--

本文标题: 一起来学习一下JavaScript的事件流

本文链接: https://lsjlt.com/news/163907.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一起来学习一下JavaScript的事件流
    目录1. 什么是事件流?2. 事件流模型2.1)事件冒泡2.2)事件捕获3. DOM事件流总结1. 什么是事件流 ? 在学习事件流之前我们先看...
    99+
    2024-04-02
  • 一起来学习JavaIO的转化流
    目录Java IO 转化流乱码引起转换流读取乱码转换流介绍InputStreamReaderOutputStreamWriter总结Java IO 转化流 乱码引起转换流 读取乱码 ...
    99+
    2024-04-02
  • 一起来学习JavaScript的BOM操作
    目录window对象全局作用域常见事件调节窗口大小定时器setTimeoutthis指向问题location对象转跳页面location常见方法总结window对象 BOM的核心对象...
    99+
    2024-04-02
  • Python中的集合一起来学习一下
    目录一、什么是集合二、集合的创建方式三、集合的相关操作3.1集合元素的判断操作3.2集合元素的新增操作3.3集合元素的删除操作四、集合之间的关系五、集合的数学操作六、集合生成式总结一...
    99+
    2024-04-02
  • 让我们一起来学习一下什么是javascript的闭包
    目录一、常见的闭包二、实例详解总结什么是闭包: 闭包是一个存在内部函数的引用关系。 该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量) 闭包的作用: 延长...
    99+
    2024-04-02
  • 一起来学习一下python的数据类型
    目录内置数据类型获取数据类型【type()】str:转换为str(字符串)类型int:转换为int类型float:转换为float类型complex:转换为complex(复数)类型...
    99+
    2024-04-02
  • 一起来学习一下python的数字类型
    目录int数字int类型Float类型complex类型int(),float(),complex()类型之间的转换总结int 数字 python 有3种数字类型int: 整数类型f...
    99+
    2024-04-02
  • 一起来学习JavaScript的语法基础
    目录1、输入输入语句2、变量变量语法扩展变量命名规范3、数据类型3.1 基本数据类型3.2 获取变量数据类型3.3 数据类型转换4、运算符算术运算符递增和递减运算符比较运算符逻辑运算...
    99+
    2024-04-02
  • 一起来学习Vue的组件化
    目录背景定义分类优势首屏加载优化组件之间的关系总体上可以分为两大类:常见使用场景可以分为三类:总结说起组件化,我毕设写的就是和组件化相关的。 当时还拿了优,运气! 话不多说,直接...
    99+
    2024-04-02
  • 一起来看看js对象和事件的学习笔记
    目录1.内置对象2.对象2.1 对象的创建2.1.1字面量形式创建2.1.2new object 创建2.1.3object对象的create方法3.对象的序列化和反序列化4.thi...
    99+
    2024-04-02
  • 一起来学习TypeScript的类型
    目录前言一、类型声明 二、类型1.number2.string3.boolean 4.字面量 5.联合类型 6.any 7.unkn...
    99+
    2024-04-02
  • 一起来学习Python的列表
    目录列表更多的方法列表的嵌套总结列表更多的方法 index():返回指定数据所在位置的下标 (注意:如果查找的数据不存在则报错。)。count():统计指定数据在当前列表中出现的次数...
    99+
    2024-04-02
  • JavaScript的防抖和节流一起来了解下
    目录1. 前言2. 函数防抖(debounce)延迟防抖前缘防抖防抖函数实现总结3. 函数节流(throttling)延迟节流前缘节流节流函数实现总结4. 两者区别5. 应用场景总结...
    99+
    2024-04-02
  • 一起来学习JAVA的运算符
    目录一、赋值运算符二、复合赋值运算符三、算数运算符四、关系运算符五、自运算符六、逻辑运算符七、条件运算符(三元运算符)总结运算符优先级表: 一、赋值运算符 运算符:【=】 含义:把...
    99+
    2024-04-02
  • 一起来学习Vue的组件间通信方式
    props 父组件可以通过props向下传递数据给子组件 静态的Props 通过为子组件在父组件中的占位符添加特性的方式来达到传值的目的 动态Props 在模版中要动态的绑定父组件的...
    99+
    2024-04-02
  • 一起来学习Vue的生命周期
    目录生命周期生命周期的简单介绍beforeCreate与createdbeforeCreate()created()beforeMount与mountedbeforeMount()m...
    99+
    2024-04-02
  • 一起来学习Java的栈和队列
    目录栈队列阻塞队列双端队列总结栈 package com.yuzhenc.collection; import java.util.Stack; public class Te...
    99+
    2024-04-02
  • 一起来学习C++的构造和析构
    目录1. 构造函数 1.1 构造函数长什么样子1.2 构造函数干嘛的1.3 思考2. 析构函数2.1 析构函数长什么样子2.2 析构函数用来干嘛(什么时候需要自己手动写析构...
    99+
    2024-04-02
  • 一起来学习Python的元组和列表
    目录1 元组2 列表总结1 元组 同一元组中元素的数据类型可以不同 元组中只包含一个元素时,需要在元素后面添加逗号,否则圆括号会被当做运算符使用 元组的创建:赋值命令=或内置函数tu...
    99+
    2024-04-02
  • 一起来学习C#的观察者模式
    using System; using System.Collections.Generic; public class Example { public static vo...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作