现在的相册大多有这个功能,鼠标点在照片的左边,可以跳到上一张,点到右边则跳到下一张。
这就需要一个坐标点的计算:(鼠标相对图片的位置) vs (图片的尺寸/2)。
后一个(图片的尺寸/2)简单,使用obj.offsetWidth/2。
前一个(鼠标相对图片的位置)好像也简单,有个事件属性叫 event.offsetX。
但是很悲剧,firefox并不支持offsetX!
我们要做的就是将offset计算出来,它的值应该等于【鼠标相对窗口左边境的位置(即event.clientX)】减去【图片到窗口左边境的距离】。
莫非后一项(图片到窗口左边境的距离)就是obj.offsetLeft吗?
但是又悲剧,obj.offsetLeft并没有这么简单,他是相对于“offsetParent”的距离,即应该是距其上级中定位元素的距离(如果不存在这个元素,则相对于整个页面文档)。
更糟的是:对于ie6,ie7,obj.offsetLeft是相对其直接父级的距离——显然他们没有遵循标准。
经过以上分析,我们可以使用以下这个麻烦的办法:从触发元素开始到root节点为止,把各级offsetParent元素的offsetLeft加起来得到【图片到窗口的距离】。
对,排除投机的办法,唯有这样了。参见:Differences in the event object properties/methods(请搜索pageX)(这里你可以注意一下:当元素是定位元素时候,即relative/absolute元素。那私有属性layerX就等于非firefox浏览器下的offsetX——这便是投机的方法,但不失为一个简单的好方法。)
demo:
标签: offsetLeft, offsetX, 兼容firefox