美文网首页让前端飞Web 前端开发
DOM事件之【捕获,冒泡】

DOM事件之【捕获,冒泡】

作者: littleyu | 来源:发表于2019-10-31 16:56 被阅读0次

先不说【捕捉,冒泡】是什么东西(概念)

首先我们来看一段代码
// html
<div id="grand">
  爷爷
  <div id="father">
    爸爸
    <div id="son">
      儿子
    </div>
  </div>
</div>
// js
grand.addEventListener('click', function f1() {
  console.log('fn1')
})

father.addEventListener('click', function f2() {
  console.log('fn2')
})

son.addEventListener('click', function f3() {
  console.log('fn3')
})
当我们鼠标点击儿子时,触发的事件顺序究竟是什么样的呢?

1、

fn3
fn2
fn1

2、

fn1
fn2
fn3
一试便知,是第一种 fn3=>fn2=>fn1

通过查阅 MDN ,我们可以使用第三个参数,默认为 falsy

1、所以当我们如下写法时:

grand.addEventListener('click', function f1() {
  console.log('fn1')
})

father.addEventListener('click', function f2() {
  console.log('fn2')
})

son.addEventListener('click', function f3() {
  console.log('fn3')
})

结果为 fn3=>fn2=>fn1

2、所以当我们如下写法时:

grand.addEventListener('click', function f1() {
  console.log('fn1')
}, true)

father.addEventListener('click', function f2() {
  console.log('fn2')
}, true)

son.addEventListener('click', function f3() {
  console.log('fn3')
}, true)

结果为 fn1=>fn2=>fn3

接下来我们就可以来说说【捕获,冒泡】

为了更清楚,我们可以用一张图来表示

左边就是参数为 true 的状态(捕获阶段), 右边就是 false 的状态(冒泡阶段),
所以就有了先捕获在冒泡这一说法

对着这张图我们再来看一段代码(虽然很无聊,因为没人会这么写)
grand.addEventListener('click', function f1() {
  console.log('fn1')
}, true)

father.addEventListener('click', function f2() {
  console.log('fn2')
})

son.addEventListener('click', function f3() {
  console.log('fn3')
})

答案也很显然易见,为 true 的先执行,也就是 fn1=>fn3=>fn2

到此,【捕获、冒泡就应该已经讲完了】

但是有一个特例!!!

就是如下的情况时,当【捕获、冒泡】在同一个元素上时(也虽然很无聊)
son.addEventListener('click', function f3() {
  console.log('fn3冒泡')
})
son.addEventListener('click', function f3() {
  console.log('fn3捕获')
}, true)

按照上图或者理论(先捕获再冒泡)说法,应该是 fn3捕获=>fn3冒泡
但是实际情况却是
当【捕获、冒泡】在同一个元素上时,那就是 按照书写顺序来,谁先写,就先执行
上述代码执行结果就应该是 fn3冒泡=>fn3捕获

end

相关文章

  • 前端面试题(3)——DOM事件类

    基本概念:DOM事件的级别 DOM事件模型:事件冒泡事件捕获 DOM事件流 描述DOM事件捕获的具体流程 Even...

  • 事件代理及常用的 HTML 事件

    之前总结了事件捕获和冒泡以及阻止事件传播,今天写一下事件代理方面的总结DOM 事件之捕获、冒泡:阻止事件传播: 事...

  • 3-6 DOM事件

    问题 DOM 事件的级别 DOM 事件模型(就是捕获和冒泡儿) DOM 事件流 描述DOM事件捕获的具体流程 Ev...

  • DOM的事件模型和DOM事件流

    DOM的事件模型 DOM事件模型包括捕获和冒泡(ie用的是事件冒泡),捕获是从上往下到达目标元素,冒泡是从当前元素...

  • event相关

    1. DOM事件的级别 dom1标准在定义时,没有涉及dom事件相关 2. DOM事件模型 捕获和冒泡,捕获向下,...

  • JavaScript 事件捕获和冒泡

    JavaScript 事件捕获和冒泡 规范 在最新的 DOM 规范中,事件的捕获与冒泡是通过 addEventLi...

  • Dom事件

    Dom事件的级别Dom事件模型(冒泡+捕获)Dom事件流 http://www.cnblogs.com/staro...

  • 事件

    一、事件流 事件捕获:由外到内事件冒泡:由内到外DOM事件流:先捕获再冒泡 二、接口 addEventListen...

  • 事件

    事件流: DOM0级事件流分为事件捕获和事件冒泡 1冒泡:从内到外,从子到父 2捕获:从父到子,从外到内 DOM2...

  • IE和DOM事件流的区别

    1.事件流的区别 IE采用冒泡型事件 Netscape使用捕获型事件 DOM使用先捕获后冒泡型事件 示例: 复制代...

网友评论

    本文标题:DOM事件之【捕获,冒泡】

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