offsetX/Y for Firefox 作者:ONEBOYS 发表时间: 2010年07月29号,星期四 阅读:154 次
现在的相册大多有这个功能,鼠标点在照片的左边,可以跳到上一张,点到右边则跳到下一张。
这就需要一个坐标点的计算:(鼠标相对图片的位置) vs (图片的尺寸/2)。
后一个简单,使用obj.offsetWidth/2。
前一个或许也简单,有个事件属性叫 event.offsetX。
但是很悲剧,firefox并不支持offsetX!
我们要做的就是将offset计算出来,它的值应该等于【鼠标相对窗口的位置(即event.clientX)】减去【图片距离窗口的位置】。
莫非后一项就是obj.offsetLeft吗? 但是又悲剧,其实obj.offsetLeft是元素相对于其parent的距离。
经过以上分析,我们顺理成章想到了以下这个麻烦的办法:从触发元素开始到root节点为止,把所有元素的offsetLeft加起来得到【图片到窗口的距离】。
对,排除投机的办法,唯有这样了。参见:Differences in the event object properties/methods(请搜索pageX)(这里你可以注意一下:当元素是定位元素时候,即relative/absolute元素。那私有属性layerX就等于非firefox浏览器下的offsetX)
demo: