js中 事件流与阻止冒泡 事件对象.stopPropagation()

简介: js中 事件流与阻止冒泡 事件对象.stopPropagation()

事件流的顺序:


先捕获再冒泡 (先从外到内 再从内到外)


注意:事件流的一个元素捕获事件触发过了 那么此元素就不会在冒泡事件中再运行了


冒泡事件:(默认存在)


当一个元素触发事件后 会依次向上调用同名事件(必须是同名事件,如果子元素触发点击事件,父元素的鼠标的鼠标经过事件不会触发)


<div class="grandf">爷爷
        <div class="fa">爸爸
            <div class="son">孙子</div>
        </div>
    </div>
grandf.addEventListener('click', function () {
            console.log('我是爷爷');
        })
        fa.addEventListener('click', function () {
            console.log('我是爸爸');
        })
        son.addEventListener('click', function () {
            console.log('孙子');
        })
        document.addEventListener('click', function () {
            console.log('我是大爷爷');
        })  //默认就是冒泡事件

点击孙子后的事件流程:


fd2497497bc03b8db04cbcef74e3edec_613c146b6fe944d88d049c9695cd0574.png


阻止冒泡:


书写:事件对象.stopPropagation() 配合事件对象e使用


stop:停止


propagation:l流动,传播


grandf.addEventListener('click', function () {
            console.log('我是爷爷');
        })
        fa.addEventListener('click', function () {
            console.log('我是爸爸');
        })
        son.addEventListener('click', function (e) {
            console.log('孙子');
            e.stopPropagation()
        })
        document.addEventListener('click', function () {
            console.log('我是大爷爷');
        })  //默认就是冒泡事件

在孙子出阻止冒泡  则点击孙子  效果:


7310063858621d511148baccf02b1f5b_fa5e40648a6044ac82c157f88c207c19.png


捕获事件:


当一个元素触发事件后 会依次向下调用同名事件(必须是同名事件, 例:子元素触发点击事件,父元素的鼠标经过事件不会触发)


DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)   false/true  true为使用捕获
grandf.addEventListener('click', function () {
      console.log('我是爷爷');
    },true)//使用捕获机制
    fa.addEventListener('click', function () {
      console.log('我是爸爸');
    },true)
    son.addEventListener('click', function () {
      console.log('孙子');
    },true)
    document.addEventListener('click', function () {
      console.log('我是大爷爷');
    },true)//加上true 就是代表捕获事件 从外往内


点击孙子  事件流程为:


e82e402756099cd91bdb5f9330acea40_3e56365f816140a2aee9129be6b7e354.png


阻止捕获:在哪个元素阻止捕获 此元素的子元素的同名事件就不会再捕获触发了(阻止元素本身可以捕获)   可以理解为:捕获事件截止的位置


理解:  


如: 爷爷 爸爸 儿子 孙子 在爸爸处截止捕获 则点击儿子或者孙子只会出现触发 爸爸和爷爷


grandf.addEventListener('click', function () {
      console.log('我是爷爷');
    },true)//使用捕获机制
    fa.addEventListener('click', function (e) {
      console.log('我是爸爸');
      e.stopPropagation()
    },true)
    son.addEventListener('click', function () {
      console.log('孙子');
    },true)
    document.addEventListener('click', function () {
      console.log('我是大爷爷');
    },true)//加上true 就是代表捕获事件 从外往内


如果爸爸被阻止捕获了  那么无论点击儿子还是孙子 都只会触发爸爸及爸爸的父元素的事件   儿子和孙子本身的时事件也不会触发

883d05015872cd218c6bdcd4e406abe6_eb965fff0aac403baa5a5402447702c1.png


相关文章
|
6月前
|
JavaScript 算法
|
6月前
|
JavaScript 前端开发 UED
JavaScript学习 -- 事件对象学习
JavaScript学习 -- 事件对象学习
40 0
|
6月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
48 2
|
20天前
|
JavaScript 前端开发 UED
JS DOM 事件流与事件冒泡
【10月更文挑战第16天】理解 DOM 事件流和事件冒泡是掌握 JavaScript 事件处理的关键。通过合理利用事件冒泡,可以实现更高效、灵活的事件处理机制,提升用户体验和开发效率。在实际开发中,要根据具体情况灵活运用这些概念,以达到最佳的效果。
|
1月前
|
JavaScript 前端开发
JavaScript 事件对象
JavaScript 事件对象
29 2
|
3月前
|
JavaScript 前端开发
JavaScript 事件流
JavaScript 事件流
30 1
|
3月前
|
JavaScript 前端开发 API
JavaScript的事件对象
JavaScript的事件对象
29 0
|
4月前
|
JavaScript
js 事件流、事件冒泡、事件捕获、阻止事件的传播
js 事件流、事件冒泡、事件捕获、阻止事件的传播
73 1
|
6月前
|
JavaScript 前端开发
|
6月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
44 0