美文网首页
DOM的事件模型中addEventListener的第三个参数

DOM的事件模型中addEventListener的第三个参数

作者: 张路1806 | 来源:发表于2018-12-21 22:35 被阅读0次

DOM的事件模型这里只讨论主流浏览器的DOM标准事件处理模型

什么是DOM事件模型

本人在初次接触时,大致学习了DOM的事件处理模型,但是那个时候更多的只记住了下面这段代码。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="x1" class="x1">
    <div id="x2" class="x2">
      <div id="x3" class="x3"></div>
    </div>
  </div>
</body>
  <style>
  .x1{
  border: 1px solid red;
  height: 50vh;
  width: 50vh;
}
.x2{
  border: 1px solid green;
  height: 30vh;
  width: 30vh;
}
.x3{
  border: 1px solid yellow;
  height: 10vh;
  width: 10vh;
}</style>
 <script>
    x2.addEventListener('click',function(e){
  console.log('x2')
},true)
    x1.addEventListener('click',function(e){
  console.log('x1')
},true)
    x3.addEventListener('click',function(e){
  console.log('x3')
},true)
  </script>
</html>

可以看出,这个html中是一个嵌套的结构。我们在JS中写入了监听事件。
DOM事件模型就是这个事件触发之后,浏览器的处理模型(方法)。——仅供理解
在早期由于浏览器市场互相竞争,所以DOM事件模型并不统一,而后主流的浏览器达成标准,所以现在用的就是DOM事件标准模型。

捕获模型和冒泡模型

在这个模型中,处理办法有两种:

  • 捕获模型 -- 由最顶层的节点(document)开始询问,查看有没有相应的事件,比如例子中的点击事件。如果有就执行,没有就询问下一个节点,直到询问到触发事件的元素为止。下面的子元素就不会询问到,如例子中,点击<div id = "x2"></div>中绿色和黄色之间就不会询问到他的子元素。

  • 冒泡模型 -- 由触发事件的元素开始,往上面节点逐步询问,直到顶层节点。


可以看出来这两种模型的最大不同就在于询问的顺序,如果触发事件的元素的其父元素也有这个事件可
执行,那么模型的不同就决定了执行顺序。
不太准确但很好理解的说法:冒泡就是从内到外,捕获就是从外到内
MDN的介绍

两种模型的兼容和addEventListener的第三个参数

在提供的例子中,大家可以发现我是写出了addEventListener的第三个参数true,在现在的标准模型中,我们是可以设定第三个参数来决定自己的处理方式的。第三个参数是布尔值:

  • true:捕获模型;
  • false: 冒泡模型;
  • 不写(默认): 冒泡模型;

一种特殊情况

就是监听的这个元素同时用两种模型监听,那么先触发哪一个呢?答案是按照代码执行顺序决定,先写先执行,后写后执行。(其实相同模型监听也是如此)

阻止传播事件

x3.addEventListener('click',function(e){
  console.log('x2')
  e.stopPropagation()
})

在我们的代码中添加e.stopPropagation()就可以阻止事件继续传播,传播到此停止。
比如例子中的传播,当我们点击黄色区域,是不会打印'x1'的。
另外如果使用阻止默认事件,会将除了传播之外的默认事件也阻止了,所以尽量不要直接阻止默认事件。

文章就到这里,如有错误欢迎指出

相关文章

  • DOM的事件模型中addEventListener的第三个参数

    DOM的事件模型这里只讨论主流浏览器的DOM标准事件处理模型 什么是DOM事件模型 本人在初次接触时,大致学习了D...

  • 事件捕获跟冒泡

    在dom的addEventListener() 方法中,参数有三个, event表示事件名称,例如'click';...

  • 事件

    当dom元素被删除时,其绑定的事件也会消失 addEventListener 目前第三个参数可以为布尔值或对象 为...

  • js事件

    事件冒泡 addEventListener 第三个参数为false 默认模式 事件捕获 addEventL...

  • 事件冒泡和捕获通俗理解

    addEventListener 第三个参数:true: 捕获阶段触发事件false: 冒泡阶段触发事件默认值是 ...

  • 2019-11-04 JS 事件冒泡和捕获

    联系: 都是事件触发时序的问题绑定事件方法(addEventListener)的第三个参数是控制事件触发顺序的;默...

  • JavaScript Events事件汇总

    事件参数、事件捕获冒泡 事件委托 事件默认行为 DOM 1 、DOM 2、DOM 3模型 实现遮罩功能(点击穿透、...

  • 事件的捕获和冒泡

    这里涉及到addEventListener的三个参数:第一个参数:事件类型第二个参数:事件的处理函数第三个参数:指...

  • [HTML] target phase事件顺序

    我们知道addEventListener的第三个参数,useCapture用来标识该事件监听函数用于处理什么阶段的...

  • 简述passive属性

    导语 在不知道哪个版本的浏览器DOM更新了addEventListener这个方法 本来这个方法的第三个参数 是u...

网友评论

      本文标题:DOM的事件模型中addEventListener的第三个参数

      本文链接:https://www.haomeiwen.com/subject/odnvkqtx.html