事件冒泡与捕获

事件捕获机制和冒泡机制你了解多少?

1. 基本概念

  • 捕获:自顶向下
  • 冒泡:自底向上

2. window.addEventListener 监听的是什么阶段的事件

// 冒泡阶段
window.addEventListener(‘click’, () => {

})

// 捕获阶段

window.addEventListener(‘click’, () => {

}, true)

3. 平常有哪些场景用到了这个机制?

事件委托

4. 一个历史页面,上面有若干按钮的点击逻辑,每个按钮都有自己的 click 事件。

新需求来了:给每一个访问的用户添加一个属性, banned = true, 此用户点击页面上的俺妞妞或者元素,都不可响应原来的函数。
而是直接 alert 提示,你被封禁了。

window.addEventListener('click', () => {
  if(banned === true) {
    e.stopProgagtion();
  }
}, true)
复制代码

演示示例

  1. html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #parent {
      background-color: antiquewhite;
      padding: 50px;
    }

    #child {
      background-color: brown;
      padding: 50px;
    }

    #son {
      background-color: chartreuse;
      padding: 50px;
    }
  </style>
</head>

<body>
  <div id="parent">
    <div id="child">
      <div id="son"></div>
    </div>
  </div>
</body>

</html>

<script src="./index.js"></script>

2) js
```javaScript
const parent = document.getElementById('parent')
const child = document.getElementById('child')
const son = document.getElementById('son')

window.addEventListener('click', (e) => {
  console.log('window 捕获')
}, true)

parent.addEventListener('click', (e) => {
  console.log('parent 捕获')
}, true)


child.addEventListener('click', (e) => {
  console.log('child 捕获')
}, true)


son.addEventListener('click', (e) => {
  console.log('son 捕获')
}, true)


window.addEventListener('click', (e) => {
  console.log('window 冒泡')
})


parent.addEventListener('click', (e) => {
  console.log('parent 冒泡')
})


child.addEventListener('click', (e) => {
  console.log('child 冒泡')
})


son.addEventListener('click', (e) => {
  console.log('son 冒泡')
})
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享