欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个例子弄懂事件冒泡和事件捕获

程序员文章站 2022-05-06 09:11:19
...

先看一张图

先看这张图,然后我们用例子来理解。
一个例子弄懂事件冒泡和事件捕获

事件冒泡

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。

事件冒泡例子

层级关系:body>div>p 给body,div,p分别绑定点击事件,console.log()出body,div,p;

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>事件冒泡</title>
	<style>
		body{
			background-color: red;
		}
		div {
			width: 500px;
			height: 500px;
			background-color: aqua;
		}
		p {
			width: 100px;
			height: 100px;
			background-color: royalblue;
		}
	</style>
	<script>
		window.onload = function(){
			document.getElementById('body').addEventListener('click',body,false)
			document.getElementById('div').addEventListener('click',div,false)
			document.getElementById('p').addEventListener('click',p,false)
			function body() {
				console.log('body')
			}
			function div() {
				console.log('body')
			}
			function p() {
				console.log('p')
			}
		}
	</script>
</head>
<body id="body">
	<div id="div">
		<p id="p"></p>
	</div>
</body>
</html>

点击p时打印结果如下:
一个例子弄懂事件冒泡和事件捕获
由结果可以看出:事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止。

事件捕获

捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)
事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。

这时将addEventListener的第三个参数改为true 再次点击:

document.getElementById('body').addEventListener('click',body,true)
document.getElementById('div').addEventListener('click',div,true)
document.getElementById('p').addEventListener('click',p,true)

结果如图:
一个例子弄懂事件冒泡和事件捕获
由此可以得出:事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止。