第一百零四篇:DOM事件流
  6dLT7EsVU3rP 2023年11月01日 45 0

好家伙,JS基础接着学,

 

1.事件流

页面哪个部分拥有特定的事件?

可以把页面想象成一个同心圆,

当你戳了其中的一点,其实你同时戳中了很多个圆

 

当你点击一个页面中的按钮,实际上你同时点击了这个按钮,这个按钮的容器,以及整个页面

 

于是有了这么个概念,事件流,

我们用事件流描述页面接受事件的顺序,

 

举个栗子:

来写一个简单页面

<!DOCTYPE html> <html lang="en"> <head> <title>vuetest</title> </head> <body> <div id="app">赞</div> </body> </html>

它的大致层级:

第一层  --Document    

第二层      ----<html>

第三层          ----<body>

第四层              ----<div>

 

 

 

 

 

这个时候,有个靓仔点了一下页面中的"赞"

然后,有人为了争论"点击事件"发生顺序开始吵架了,他们是"事件冒泡"和"事件捕获"

 

 

 

1.1.事件冒泡

IE事件被称为事件冒泡,事件被定义为从最具体的元素(DOM树中最深节点)开始触发,然后向上传播至没有那么具体的元素(文档)

"事件冒泡"说:你是点中"赞"然后点中整个页面

所以事件冒泡认为你的事件触发顺序是

<div> --><body> --><html> -->Document

 

1.2.事件捕获

事件捕获的意思是最不具体的节点应该最先受到事件,而最具体的节点应该最后收到事件

"事件捕获"说:你点中的是整个页面中的"赞",你是先点中整个页面,再点中"赞

所以事件捕获认为你的事件触发顺序是:

Document --> <html> --> <body> --> <div>

 

"事件冒泡"和""事件捕获"因为想法完全相反而吵起来了

 

2.DOM事件流

事件流,可以简单的理解为事件的执行顺序

事件流,认为"事件冒泡"和""事件捕获"的想法都很好,于是整合他们的想法

DOM2 Events 规范规定事件流分为3个阶段:事件捕获、到达目标和事件冒泡。事件捕获最先发生,为提前拦截事件提供了可能。

然后,实际的目标元素接收到事件。最后一个阶段是冒泡,最迟要在这个阶段响应事件。

仍以前面那个简单的HTML为例,点击<div>元素会以如图所示的顺序触发事件。

 

 

                                                                 ---图片来自JS高级程序设计

事件流的三个阶段;

 

在DOM兼容浏览器中,事件流分为3个阶段:

 

(1)捕获阶段:事件从Document节点自上而下向目标节点传播的阶段;

 

(2)目标阶段:真正的目标节点正在处理事件的阶段;

 

(3)冒泡阶段:事件从目标节点自下而上向Document节点传播的阶段。


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

下一阶段,即会在<div>元素上触发事件的“到达目标”阶段,通常在事件处理时被认为是冒泡阶段的一部分。然后,冒泡阶段开始,事件反向传播至文档。
大多数支持DOM事件流的浏览器实现了一个小小的拓展。虽然DOM2 Events 规范明确捕获阶段不命中事件目标,但现代浏览器都会在捕获阶段在事件目标上触发事件。最终结果是在事件目标上有两个机会来处理事件。

 

最后再来试试

 

<!DOCTYPE html> <html lang="en"> <head> <title>vuetest</title> </head> <body> <div id="app" onclick="console.log(11111111)"><h1>副歌魏武实</h1> <div onclick="console.log(2222222222)"><h1>赞</h1></div> </div> </body> </html>

 

让我们点一下赞

 

看来是事件冒泡了,看不到事件捕获 

 

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  f18CFixvrKz8   2024年05月20日   90   0   0 JavaScript
  fxrR9b8fJ5Wh   2024年05月17日   52   0   0 JavaScript
  2xk0JyO908yA   2024年04月28日   40   0   0 JavaScript
6dLT7EsVU3rP