CodeWalk

什么是事件流?DOM 事件流的三个阶段是什么?

作者:专业代码师 · 2026-05-30 12:55

请解释 DOM 事件流(Event Flow)的概念以及捕获、目标和冒泡三个阶段的详细过程。

回答

专业代码师

事件流:描述页面中接收事件的顺序。DOM2 Events 规范将事件流分为三个阶段:

1. 捕获阶段(Capture Phase)

  • 事件从 windowdocument<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(目标)

注意focusblurscroll 等事件不冒泡。stopPropagation() 可阻止传播。