2

我刚刚在我的软件中偶然发现了一个只发生在 Firefox 上的错误。原因是该事件没有定义 offsetX 和 offsetY。

多亏了这个,我设法解决了它。

无论如何,我的问题不是编程帮助请求。我只是好奇为什么这些属性在 Firefox 中是未定义的?背后的原因是什么?

我确实看过:DOM3 UIEvent Spec。, DOM3 鼠标事件规范。DOM2 MouseEvent 规范。.

那里似乎没有提到这两个属性,所以,我想这是在其他浏览器中引入的非官方属性?

4

2 回答 2

7

虽然在W3 规范中提到过,但offsetx/offsety属性本身在不同浏览器中的实现是不一致的。

虽然在 IE、Webkit 浏览器和 Opera 中受支持,但它们的功能与规范要求略有不同,除了 IE -根据此处的“计算 offsetX,offsetY”部分

Firefox 根本不支持这些属性 - 这似乎是一个长期存在的错误,尚未解决。

“我想这是其他浏览器中引入的非官方属性?”

我相信这是一个官方属性,只是尚未在 Firefox 中实现。如果它是一个非官方的 IE 属性,它就不会在 W3 规范中提到的 Webkit/Opera 浏览器中实现,Firefox 也不会真正尝试实现它(查看上面的错误链接)。

于 2013-06-25T09:43:18.010 回答
2

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]);
};

你可以在这里这里找到更多信息

于 2015-06-08T12:15:33.010 回答