我刚刚在我的软件中偶然发现了一个只发生在 Firefox 上的错误。原因是该事件没有定义 offsetX 和 offsetY。
多亏了这个,我设法解决了它。
无论如何,我的问题不是编程帮助请求。我只是好奇为什么这些属性在 Firefox 中是未定义的?背后的原因是什么?
我确实看过:DOM3 UIEvent Spec。, DOM3 鼠标事件规范。和DOM2 MouseEvent 规范。.
那里似乎没有提到这两个属性,所以,我想这是在其他浏览器中引入的非官方属性?
我刚刚在我的软件中偶然发现了一个只发生在 Firefox 上的错误。原因是该事件没有定义 offsetX 和 offsetY。
多亏了这个,我设法解决了它。
无论如何,我的问题不是编程帮助请求。我只是好奇为什么这些属性在 Firefox 中是未定义的?背后的原因是什么?
我确实看过:DOM3 UIEvent Spec。, DOM3 鼠标事件规范。和DOM2 MouseEvent 规范。.
那里似乎没有提到这两个属性,所以,我想这是在其他浏览器中引入的非官方属性?
虽然在W3 规范中提到过,但offsetx
/offsety
属性本身在不同浏览器中的实现是不一致的。
虽然在 IE、Webkit 浏览器和 Opera 中受支持,但它们的功能与规范要求略有不同,除了 IE -根据此处的“计算 offsetX,offsetY”部分。
Firefox 根本不支持这些属性 - 这似乎是一个长期存在的错误,尚未解决。
“我想这是其他浏览器中引入的非官方属性?”
我相信这是一个官方属性,只是尚未在 Firefox 中实现。如果它是一个非官方的 IE 属性,它就不会在 W3 规范中提到的 Webkit/Opera 浏览器中实现,Firefox 也不会真正尝试实现它(查看上面的错误链接)。
offsetX 和 offsetY 在 Firefox 中不一致,所以你可以这样做
document.body.onclick = function(e) {
e = e || window.event;
var target = e.target || e.srcElement,
rect = target.getBoundingClientRect(),
offsetX = e.clientX - rect.left,
offsetY = e.clientY - rect.top;
console.log([offsetX, offsetY]);
};