冒泡与捕获与目标

69 阅读1分钟

样式代码

  <style>
    .box {
        width: 500px;
        height: 500px;
        background-color: pink;
    }

    .sBox {
        width: 100px;
        height: 100px;
        background-color: green;
    }
</style>

body代码

 <div class="box">
    <div class="sBox"></div>
</div>

目标

目标: 你点击在那个元素上, 那么这个事件的目标 就是这个元素

事件的冒泡与捕获

冒泡: 就是从 目标 的事件处理函数开始, 依次向上, 一直到 window 的事件处理函数触发

也就是说从下向上的执行 事件处理函数

捕获: 就是从 window 的事件处理函数开始, 依次向下, 一直到 目标 的事件处理函数触发

也就是说从上向下的执行 事件处理函数

区别: 就是在事件的传播中, 多个同类型的事件处理函数的执行顺序不同, 仅此而已

0. 获取元素

    var sBox = document.querySelector('.sBox')
    var box = document.querySelector('.box')
    var oBody = document.body

1. 按照事件冒泡的形式传播

    sBox.onclick = function () {
        console.log('我是 内层 DIV, 我的点击事件被触发了')
    }
    box.onclick = function () {
        console.log('我是 外层 DIV, 我的点击事件被触发了')
    }
    oBody.onclick = function () {
        console.log('我是 body, 我的点击事件被触发了')
    }

2. 按照事件捕获的形式传播

addEventListener 第三个参数就是决定当前传播方式为 捕获还是冒泡

默认第三个参数为 false, 代表传播方式为 冒泡

如果想按照捕获的形式传播, 那么给第三个参数 传递一个 true

    sBox.addEventListener('click', function () {
        console.log('我是 内层 DIV, 我的点击事件被触发了')
    }, true)

    box.addEventListener('click', function () {
        console.log('我是 外层 DIV, 我的点击事件被触发了')
    }, true)

    oBody.addEventListener('click', function () {
        console.log('我是 body, 我的点击事件被触发了')
    }, true)