欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 从简单到复杂:JavaScript 事件处理的全方位解读

从简单到复杂:JavaScript 事件处理的全方位解读

2025/4/29 20:44:10 来源:https://blog.csdn.net/qq_53673551/article/details/147503526  浏览:    关键词:从简单到复杂:JavaScript 事件处理的全方位解读

在这里插入图片描述


目录

  • 基础语法
  • 事件捕获与冒泡
  • 事件委托


基础语法

事件机制是指当用户在DOM元素上执行特定操作(例如点击按钮、移动鼠标等)时,会触发相应的事件。JavaScript通过监听这些事件,并将对应的处理函数绑定到事件上,从而对用户的交互做出响应。

// 1. HTML属性方式(内联方式)
<div class="event-box" onclick="alert('HTML属性方式')">HTML属性方式</div>// 2. DOM属性方式绑定事件
<div class="event-box" id="domPropertyBox">DOM属性方式</div>
domPropertyBox.onclick = function () {logEvent('DOM属性方式触发了点击事件')
}// 3. addEventListener方式绑定事件(推荐)
<div class="event-box" id="listenerBox">addEventListener方式</div>
listenerBox.addEventListener('click', function () {logEvent('addEventListener方式触发了点击事件')
})

不同事件绑定方式的特性如下:

特性HTML属性方式DOM属性方式addEventListener
多个事件处理器
控制事件阶段❌ (只冒泡)❌ (只冒泡)✅ (可选捕获/冒泡)
移除事件困难设置为nullremoveEventListener
代码组织混合在HTML中分离完全分离
this指向window元素本身元素本身

可列举的事件类型:

事件类型事件名称描述
鼠标事件click单击事件
dblclick双击事件
contextmenu右键点击事件
mousedown鼠标按下事件
mouseup鼠标释放事件
mouseover鼠标移入元素事件
mouseout鼠标移出元素事件
mousemove鼠标在元素上移动事件
键盘事件keydown键盘按键按下事件
keyup键盘按键释放事件
keypress键盘按压事件(字符键)
表单事件submit表单提交事件
reset表单重置事件
focus获得焦点事件
blur失去焦点事件
input输入内容变化事件
change内容改变且失去焦点事件
拖放事件dragstart开始拖动元素
drag拖动元素过程中
dragend拖动操作结束
dragenter拖动元素进入目标区域
dragover拖动元素在目标区域上方
dragleave拖动元素离开目标区域
drop在目标区域放置被拖元素
滚动事件scroll元素或文档被滚动
剪贴板事件copy复制操作
cut剪切操作
paste粘贴操作
触摸事件 (移动端)touchstart触摸开始
touchmove触摸移动
touchend触摸结束
touchcancel触摸被系统中断
窗口/文档事件resize窗口大小改变
load页面加载完成

事件捕获与冒泡

在JavaScript中,事件的传播过程遵循事件流机制,事件流的顺序包括捕获和冒泡两种方式。整个事件流可以分为三个阶段:首先是 捕获阶段,然后是 目标阶段,最后是 冒泡阶段。事件捕获和事件冒泡是处理DOM事件的两种不同机制。

在这里插入图片描述

  • 事件捕获是从最外层的元素开始,逐步向内传播到目标元素。例如:从windowdocument,再到htmlbody,最终到达div
  • 事件冒泡则是从目标元素开始,逐步向外传播到最外层的元素。例如:从divbody,再到htmldocument,最终到达window
element.addEventListener(event, handler, useCapture);
// event:具体的事件
// handler:处理的函数
// 指定什么事件:默认为false,事件在冒泡阶段处理event.preventDefault() // 阻止浏览器对事件的默认行为,
// 如:阻止链接的跳转、表单的提交、输入框的默认行为
event.stopPropagation() //阻止事件冒泡,同级不阻止
event.stopImmediatePropagation() //阻止事件冒泡,同级阻止

案例如下
在这里插入图片描述
在这里插入图片描述

事件委托

  • 事件委托(Event Delegation) 是一种基于事件冒泡机制的优化技术。它允许我们将事件监听器添加到父元素,而不是直接添加到多个子元素上。
  • 当子元素的事件被触发时,事件会冒泡到父元素,然后由父元素上的监听器处理。通过检查事件的target属性,我们可以确定哪个具体的子元素触发了事件。
//事件代理  节约内存 提升性能(不需要注销子节点)
let ul = document.getElementById("ul");
ul.addEventListener("click", (event) => {console.log(event.target.innerHTML);
})

案例如下

在这里插入图片描述
在这里插入图片描述

特性事件委托直接绑定
内存使用✅ 低(只有一个事件监听器)❌ 高(每个元素一个监听器)
初始化时间✅ 快(只需绑定一次)❌ 慢(需要为每个元素绑定)
动态元素处理✅ 自动支持新添加的元素❌ 需要手动为新元素绑定事件
事件处理时间⚠️ 稍慢(需要遍历确定目标元素)✅ 稍快(直接知道目标元素)
代码复杂度✅ 简洁❌ 冗余
元素移除✅ 不需要手动解绑❌ 需要手动解绑避免内存泄漏
点击性能测试⚠️ 稍慢(需要判断目标元素)✅ 稍快(直接绑定到目标元素)

VUE 事件系统

https://www.cnblogs.com/WindrunnerMax/p/13629209.html

Vue中通过 v-on 或其语法糖 @ 指令来给元素绑定事件并且提供了事件修饰符,基本流程是进行模板编译生成 AST ,生成render函数后并执行得到VNodeVNode 生成真实DOM 节点或者组件时候使用addEventListener方法进行事件绑定。

下一篇会对 VUE 的事件系统将进行详细讲解…

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词