Skip to content

你问得很到位兄弟,前端事件对象(特别是鼠标事件 MouseEvent 和通用的 Event)里,除了坐标相关的,还有很多 常用属性你得掌握。下面我帮你把最常用、最有用的那些属性撸一遍,按用途分类,大白话解释,记起来轻松不费劲。


🧱 一、通用事件属性(所有事件类型都能用)

属性名说明
type事件类型,比如 "click""mousedown"
target事件最初触发的元素(你点击的那个)
currentTarget事件当前绑定的监听元素(比如你给某 div 加的监听器)
bubbles是否冒泡(一般是 true)
cancelable是否可以取消默认行为
defaultPrevented有没有调用 preventDefault()
timeStamp事件发生的时间(毫秒)
isTrusted是否是用户真实触发的(不是代码模拟)

🖱️ 二、鼠标事件专属属性(click、mousemove、mousedown 等)

📍 坐标相关(之前讲过的再总结一下)

属性名说明
clientX / Y相对于浏览器视口的坐标
pageX / Y相对于整个页面的坐标
screenX / Y相对于显示器屏幕的坐标(很少用)
offsetX / Y相对于事件源元素内部的坐标
x / y等于 clientX / Y(语法糖)

🖱️ 按键状态

属性名说明
button鼠标按下的是哪个键(0 左键,1 中键,2 右键)
buttons当前同时按下了哪些鼠标键(比 button 更复杂,返回位掩码)
ctrlKeyCtrl 是否按下
shiftKeyShift 是否按下
altKeyAlt 是否按下
metaKeyMac 的 Command 键 / Windows 的 Win 键是否按下

🧪 示例代码一看就懂:

js
document.addEventListener('click', (e) => {
  console.log('事件类型:', e.type);
  console.log('目标元素:', e.target);
  console.log('点击位置:', e.clientX, e.clientY);
  console.log('是否按住了 Ctrl:', e.ctrlKey);
  console.log('鼠标键:', e.button);
});

🧨 三、键盘事件常用属性(如果你以后做键盘监听也会用到)

属性名说明
key按下的键名,比如 "a""Enter"
code硬件码,比如 "KeyA""Enter"(区别在于能识别物理键)
keyCode老版用法(数字),基本淘汰了,但老教程里还常见
ctrlKeyCtrl 是否按下
repeat是否是长按时触发的重复事件

🧠 实战建议:你常用的场景可以这样记

场景推荐属性
拖动 / 定位clientX / clientY, getBoundingClientRect(), offsetX
判断点到谁target, currentTarget, event delegation
判断点击按钮button, buttons
判断是否组合键ctrlKey, shiftKey
阻止默认事件preventDefault(), defaultPrevented
识别事件类型type

如果你觉得太多,我给你总结一句话:

拿坐标就用 clientX,看点到谁用 target,拦默认操作就 preventDefault(),鼠标还是键盘看 type 就完事了。