Javascript, ES6, Golang, js, design, works, uuorks

2008年12月22日

IE和firefox 事件Event中clientX 的2px之差

今天在做一个js效果,需要获得事件的鼠标坐标,遂考虑使用clientX,由于使用了mootools框架,以为都给格式化了。但是不管x,还是y,ie和firefox始终相差2px。于是google了一下,似乎答案很少,难道别的前端都不做这事?原来ie真的很傻,它就是从(2,2)开始的,必须减去document.documentElement.clientLeft 和document.body.clientLeft。

在标准模式(standards mode)下,clientX 是从 0 开始计算的,而在差异模式下(quirks mode,有没有更好的翻译?),是从2 开始的,但奇怪的是,测试两种模式都是从2,2 开始的。
实际上,这个值是分别存在于 document.documentElement.clientLeft 和 document.body.clientLeft 。在 standards mode 下面,document.documentElement.clientLeft 值为 2,document.body.clientLeft 为 0 。
在 quirks mode 下面正好相反 document.documentElement.clientLeft 为 0 ,document.body.clientLeft 值为2 。

x=event.clientX-document.documentElement.clientLeft - document.body.clientLeft ;
y=event.clientY-document.documentElement.clientTop - document.body.clientTop ;

转 http://bolm.cn/blog/?p=31

只要这样做event的2px之差就给修正了,可恶的IE。

没有评论:

发表评论