DOM事件流模型

DOM事件流模型描述了浏览器中事件传播的完整路径,包含以下核心机制:

一、事件传播三阶段

1.‌捕获阶段(Capture Phase)

事件从window对象开始,沿DOM树‌自上而下 ‌传播至目标元素的父节点(不包含目标元素)。此阶段用于‌提前拦截事件‌(如权限校验)。

ruby 复制代码
element.addEventListener('click', handler, true); // 第三个参数true启用捕获

2.‌目标阶段(Target Phase)

事件到达‌触发的目标元素‌(如被点击的按钮),执行绑定在该元素上的事件处理函数。

3.‌冒泡阶段(Bubbling Phase)

事件从目标元素‌自下而上‌传播至window对象。默认事件绑定(如onclick)在此阶段触发。

arduino 复制代码
element.addEventListener('click', handler); // 默认冒泡阶段

完整流程示例 ‌:点击<div>时传播路径:

window → document → html → body → div(目标)→ body → html → document → window

二、关键控制机制

1.‌阻止事件传播

  • event.stopPropagation():阻止事件继续捕获或冒泡

  • event.stopImmediatePropagation():阻止当前元素后续所有监听器执行

2.‌事件委托(Event Delegation)

利用冒泡机制,在‌父元素绑定事件‌处理子元素逻辑,减少内存占用:

javascript 复制代码
parent.addEventListener('click', (e) => {

  if (e.target.matches('.child')) {

    console.log('子元素被点击');

  }

});

三、浏览器兼容性差异

特性 现代浏览器 旧版IE(≤8)
事件绑定 addEventListener attachEvent
捕获阶段支持
事件对象获取 event window.event
阻止冒泡 event.stopPropagation() event.cancelBubble=true

四、DOM事件级别对比

级别 绑定方式 特点
DOM0 element.onclick=function 同一事件仅能绑定一个处理函数
DOM2 addEventListener 支持捕获/冒泡、多函数绑定
DOM3 新增事件类型(如scroll、keyup) 扩展更多交互事件

注意事项‌:

  • 文本节点在W3C标准下可触发事件(IE除外)

  • 目标阶段的事件处理函数‌同时存在于捕获和冒泡阶段‌(按注册顺序执行)

流程图解事件流‌:

css 复制代码
graph LR

A[捕获阶段:Window→Document→...→目标父元素] --> B[目标阶段:目标元素]

B --> C[冒泡阶段:目标父元素→...→Window]
相关推荐
ZC跨境爬虫25 分钟前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。1 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星1 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒2 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端
丷丩2 小时前
MapLibre GL JS第19课:实时更新要素
前端·javascript·gis·map·mapbox·maplibre gl js
Mr.Daozhi2 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
哆来A梦没有口袋2 小时前
干货精讲 | 初级CSS面试高频考题
前端·css·面试
掘金013 小时前
EmbedPDF Vue 版 完整正文文档 全网首发
前端
OpenTiny社区3 小时前
操作ArkTS页面跳转及路由相关心得
前端·typescript·web·opentiny
xiaohua0708day3 小时前
Lodash库
前端·javascript·vue.js