什么是事件流?DOM 事件流的三个阶段是什么?
请解释 DOM 事件流(Event Flow)的概念以及捕获、目标和冒泡三个阶段的详细过程。
回答
专业代码师
事件流:描述页面中接收事件的顺序。DOM2 Events 规范将事件流分为三个阶段:
1. 捕获阶段(Capture Phase):
- 事件从
window→document→<html>→<body>→ ... → 目标元素的父节点 - 逐级向下传播,此时
addEventListener第三个参数{ capture: true }的处理函数被调用 - 主要用于事件拦截
2. 目标阶段(Target Phase):
- 事件到达目标元素本身
- 执行目标元素上绑定的处理函数
3. 冒泡阶段(Bubble Phase):
- 事件从目标元素逐级向上冒泡到
window - 默认情况下事件处理在冒泡阶段执行(
capture: false)
示意图:
捕获阶段 冒泡阶段
window ← ← ← ← ← ← ← window
document ← ← ← ← ← ← ← document
html ← ← ← ← ← ← ← html
body ← ← ← ← ← ← ← body
div ← ← ← ← ← ← ← div
button(目标)
注意:focus、blur、scroll 等事件不冒泡。stopPropagation() 可阻止传播。