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


相关文章
|
3月前
|
JavaScript 算法
|
3月前
|
JavaScript 前端开发 UED
JavaScript学习 -- 事件对象学习
JavaScript学习 -- 事件对象学习
19 0
|
6月前
|
JavaScript 前端开发 UED
JavaScript学习 -- 事件对象学习
JavaScript学习 -- 事件对象学习
25 0
|
2月前
|
JavaScript 前端开发 API
探索JavaScript事件流:DOM中的神奇旅程
JavaScript中的事件流是一种机制,用于描述和处理事件在DOM树中的传播过程。了解事件流的属性和工作原理对于编写高效的事件处理代码和实现复杂的交互功能至关重要。本文将详细介绍JavaScript事件流的发展流程、属性以及应用场景,并提供一些代码示例和引用资料,帮助读者深入理解并应用这一重要的前端技术。
|
3月前
|
JavaScript
JS事件,你真的懂吗(捕获,冒泡)?
JS事件,你真的懂吗(捕获,冒泡)?
29 0
|
4月前
|
JavaScript 前端开发
原生JavaScript之dom如何进行事件监听(事件捕获/冒泡)
原生JavaScript之dom如何进行事件监听(事件捕获/冒泡)
69 1
|
5月前
|
JavaScript 前端开发
JavaScript 事件流
JavaScript 事件流
18 0
|
5月前
|
JavaScript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
23 0
|
6月前
|
前端开发 JavaScript 开发者
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)
|
6月前
|
前端开发 JavaScript
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)
带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)