为什么Firefox event.offsetX和offsetY未定义?

时间:2013-06-25 09:27:08

标签: javascript firefox dom cross-browser offset

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

由于this,我设法解决了这个问题。

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

我确实浏览过:DOM3 UIEvent Spec.DOM3 MouseEvent Spec.DOM2 MouseEvent Spec.

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

2 个答案:

答案 0 :(得分:7)

虽然在W3 specification中提及,但offsetx / offsety属性本身在浏览器中的实现方式不一致。

虽然在IE,Webkit浏览器和Opera中受到支持,但它们的功能与规范要求略有不同,IE除外 - according to the "Calculating offsetX, offsetY" section here

Firefox中根本不支持这些属性 - 它似乎是a long-time bug尚未解决。

  

"我认为这是在其他地方引入的非官方财产   浏览器"

我认为它是一个官方财产,在Firefox中尚未实施。如果它是一个非官方的IE属性,它将不会在W3规范中提到的Webkit / Opera浏览器中实现,也不会实际尝试实现它(请查看上面的bug链接)。 / p>

答案 1 :(得分:1)

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

您可以找到更多信息Herehere