关于javascript:为什么未定义Firefox event.offsetX和offsetY?

Why Firefox event.offsetX and offsetY are undefined?

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

由于这个原因,我设法修复了它。

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

我确实浏览过:DOM3 UIEvent规范,DOM3 MouseEvent规范。 和DOM2 MouseEvent规范。

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


尽管在W3规范中提到了offsetx / offsety属性本身,但它们在浏览器之间的实现却不一致。

尽管在IE,Webkit浏览器和Opera中受支持,但它们的功能都与规范要求略有不同,但IE除外-根据此处的"计算offsetX,offsetY"部分。

Firefox完全不支持这些属性-它似乎是一个长期存在的错误,尚待解决。

"I suppose that's an unofficial property introduced in other
browsers?"

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


Firefox中的offsetX和offsetY不一致,因此您可以这样做

1
2
3
4
5
6
7
8
9
10
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]);
};

您可以在这里和这里找到更多信息