JS事件流

  • 1. 什么是事件流 ?
  • 2. 事件流模型
    • 2.1) 事件冒泡
    • 2.2) 事件捕获
  • 3. DOM 事件流

1. 什么是事件流 ?

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

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

即用户与页面的交互动作
(如用户点击元素时,鼠标移动到某个元素上等等)

  • 事件的作用

JavaScriptHTML 的交互就是通过事件实现的

  • 那么事件流是什么呢 ?

页面接受事件的顺序


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 规范明确捕获阶段不命中目标事件,但现代浏览器都会在捕获阶段在事件目标上触发事件。
所以,在事件目标上有两个机会来处理事件。

JavaScript事件流相关推荐

  1. JavaScript事件流--事件冒泡、目标与事件捕获

    1.事件冒泡 微软提出了名为事件冒泡的事件流.事件冒泡可以形象地比喻为把一颗石头投入水中,泡泡会一直从水底冒出水面.也就是说,事件会从最内层的元素开始发生,一直向上传播,直到document对象. 因 ...

  2. JavaScript事件流模型

    事件流 捕获流 捕获流最早由网景公司开发的浏览器使用,在如下结构中 <div> <button type='submit'></button> </div&g ...

  3. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...

  4. html流动模型,javascript的事件流模型都有什么?

    事件流:当你在页面触发一个点击事件后,页面上不仅仅有一个元素响应该事件而是多个元素响应同一个事件,因为元素是在容器中的.事件发生的顺序就是事件流,不同的浏览器对事件流的处理不同. JavaScript ...

  5. javaScript事件(一)事件流

    一.事件 事件是文档或者浏览器窗口中发生的,特定的交互瞬间. 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字. 事件是javaScript和DOM之间交 ...

  6. JavaScript 详说事件流(冒泡、捕获、传播、委托)

    事件流 事件流描述的是从页面中接收事件的顺序. 标准DOM事件流存在三个阶段:事件捕获阶段.处于目标阶段和事件冒泡阶段. 事件捕获:当触发事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元 ...

  7. javascript -- 事件--事件流-- 冒泡 --捕获

    javascript -- 事件 事件是js和用户操作交互的桥梁, JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型 内联模型 这种模型是最传统接单的一种处理事件的方法.在内 ...

  8. 【追寻javascript高手之路05】理解事件流

    前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...

  9. JavaScript 中的事件流和事件处理程序(读书笔记思维导图)

    JavaScript 程序采用了异步事件驱动编程模型.在这种程序设计风格下,当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web 浏览器就会产生事件(event). JavaScript ...

最新文章

  1. 给python初学者的最好练手项目-Python的练手项目有哪些值得推荐?(知乎转载)...
  2. 机器学习算法加强——SVM实践
  3. 12个有趣的C语言面试题及答案
  4. docker可视化管理界面_分析一款Docker容器可视化管理工具Porttainer
  5. linux c++ 编译 库,LINUX C/C++ 编译库关系
  6. jmeter ---实战(详解)
  7. 商业认知,在创业的时候,有人今天做服装不赚钱,就换了餐饮;换了餐饮业不赚钱,又继续换?
  8. [swift] LeetCode 49. Group Anagrams
  9. Composer基础应用1
  10. Linux 服务器安全加固方案
  11. 魅魔php影视系统,魅魔Maccms电影程序PHP
  12. 工欲善其事必先利其器——AWS认证是你最好的磨刀石
  13. 通过 scrapy 爬取豆果美食热门数据, 使用 flask 搭建后端, 最后搭建一个简单的小程序
  14. Linux优化学习之Load Average (平均负载)
  15. 推荐上百本优质大数据书籍,附必读清单(大数据宝藏)
  16. 红米10x android11,红米10X 5G版刷机包MIUI11
  17. Linux的基本使用和程序部署
  18. 解决iPhone无法连接iTunes
  19. 小程序-同步微信运动的步数
  20. 点石成金:“硅业报国”不仅是理念

热门文章

  1. Zynq学习_____以太网三部曲(二)LWip_初始化过程
  2. 软件工程项目 - 食品批发系统 需求分析
  3. 【WSN】基于改进鲸鱼算法算法实现无线传感器网络wsn节点部署优化matlab源码
  4. CF526 F Pudding Monsters
  5. word形状功能应用:如何绘制精美的插画?
  6. 《光荣与梦想》读书流水账—第一部
  7. 真空镀膜技术和502熏显法完美结合让指纹查询更容易
  8. 什么是Android - 嵌入式设备编程的历史
  9. Keras中Sequential模型及方法详细总结
  10. linux 磁盘并发io,Linux系统 磁盘IO过高排查总结