JS-从基础到高阶的 DOM 事件速查手册

34 阅读3分钟

前言

Web 开发的核心在于交互,而交互的本质就是对各类事件Events的精准捕捉与响应。本文整理了从鼠标、键盘到拖拽、窗口的所有主流事件类型,建议收藏作为日常开发的速查工具。

一、 鼠标事件 (Mouse Events)

鼠标事件是 Web 交互中频率最高的一类。

事件类型触发时机关键特性
click左键单击移动端有300ms延迟检测双击
dblclick鼠标双击需在300ms内完成两次点击
mousedown/up鼠标按下 / 释放拖拽功能的核心起点与终点
mousemove在元素内移动高频触发,实战中务必配合“节流 (Throttle)”优化
mouseenter/leave进入 / 离开元素不冒泡,进入子元素不会重复触发(推荐用于 UI 反馈)
mouseover/out进入 / 离开元素及子元素会冒泡,在子元素间移动会频繁切换触发
contextmenu右键点击常配合 e.preventDefault() 禁用或自定义右键菜单
wheel滚轮滚动通过 deltaY 判断滚动方向

坐标获取技巧:

// 获取相对于浏览器视口的坐标
element.addEventListener("click", (e) => {
  console.log(`位置坐标: X=${e.clientX}, Y=${e.clientY}`);
}); 

二、 键盘事件 (Keyboard Events)

用于处理快捷键、搜索框提交等逻辑。

事件类型触发时机
keydown按下任意键(按住不放会连续触发)
keyup释放按键

💡 建议:如果想要匹配按下的键值,可通过event.key来匹配


三、 表单与焦点事件 (Form & Focus)

事件类型触发时机典型场景
input值实时变化搜索联想、实时字数统计
change值改变且失去焦点下拉框选择、上传文件后的处理
focus / blur获得 / 失去焦点输入框高亮、表单校验提示(不冒泡
submit表单提交拦截默认提交进行 AJAX 异步请求

四、 窗口与页面生命周期

事件类型典型用途
load页面所有资源(含图片、样式)加载完成。用于依赖尺寸的初始化。
resize窗口缩放。常用于 Echarts 图表重绘或响应式适配。
scroll滚动。用于懒加载、吸顶效果、无限滚动。
hashchangeURL 的 # 变化。应用于单页应用路由。

五、 拖拽事件 (Drag & Drop)

拖拽 API 可以实现极其丰富的交互,如文件上传、排序等。

1. 拖拽源 (被拖动的元素):

  • dragstart: 开始拖拽。
  • dragend: 拖拽结束。

2. 释放目标 (接收拖拽的区域):

  • dragenter: 进入目标区域。
  • dragover: 在目标区域上方移动(必须阻止默认事件 e.preventDefault() 才能触发 drop)。
  • drop: 鼠标放开,完成放置。

六、 实战小贴士:如何选择事件?

  1. 移动端点击:如果你在做移动端页面,虽然 click 现在很快,但追求极致响应可以使用 touchstart
  2. 性能优化mousemovescrollresize 这类事件在 1 秒内会触发几十上百次,直接在回调里写重逻辑会导致页面卡顿,请务必使用 节流 (Throttle)
  3. 冒泡风险:在做下拉菜单或悬浮提示时,优先选择 mouseenter/mouseleave,可以避免复杂的冒泡带来的闪烁 Bug。