JavaScript 事件对象的三个阶段
在 JavaScript 事件对象(Event Object)的生命周期中有三个不同的阶段。
- 捕获阶段(Capture Phase)
事件对象从 Window 开始逐级传播,最终到达目标节点的父级。此过程为捕获阶段。 - 目标阶段(Target Phase)
事件对象从目标节点的父级,达到目标节点。此过程为目标阶段。 - 冒泡阶段(Bubble Phase)
事件对象从目标节点的父级,最终到达 Window 。此过程为冒泡阶段。
观察如下代码:
思考console.log
在控制台输出顺序。
<!DOCTYPE html>
<html>
<body>
<div class="container">
<button id="btn">Click Me!</button>
</div>
<script type="text/javascript">
document.getElementById('btn')
.addEventListener('click', function () {
console.log('Bubbling Phase', 'Button Clicked!');
});
document.getElementById('btn')
.addEventListener('click', function () {
console.log('Capture Phase', 'Button Clicked!');
}, true);
</script>
</body>
</html>
输出顺序为:
Capture Phase Button Clicked!
Bubbling Phase Button Clicked!
函数addEventListener
第三参数,如果设置为true
,则事件在“捕获阶段”触发。
在 React 事件中,也作出区分。例如onFocusCapture
凡是以Capture
结尾的事件,会在捕获阶段(Capture Phase)执行。
参考文献
(完)