目录
事件流:事件完整执行过程中的流动路径
1、捕获阶段:从父元素到子元素
元素.addEventListener(事件,函数,是否捕获触发)
- 如果第三个参数为TRUE,则代表捕获阶段触发
- 如果第三个参数为FALSE,则代表冒泡阶段触发,默认为false
- 若用L0事件监听,则只有冒泡阶段,没有捕获阶段
2、冒泡阶段:从子元素到父元素
当事件被触发后,该事件会从子元素向其祖先元素依次触发
<!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>事件流</title>
<style>
.father {
width: 500px;
height: 500px;
background-color: pink;
}
.son {
width: 300px;
height: 300px;
background-color: purple;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
<script>
let father = document.querySelector('.father')
let son = document.querySelector('.son')
son.addEventListener('click', function () {
alert('我是儿子')
},true)
father.addEventListener('click', function () {
alert('我是爸爸')
},true)
document.addEventListener('click', function () {
alert('我是爷爷')
},true)
</script>
</body>
</html>
阻止事件流发生
1、阻止事件对象
e.stopPropagation()
2、案例:阻止冒泡事件
<!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-s