CSSASSCSSASS

三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之

offsetX/Y for Firefox
作者:ONEBOYS    发表时间: 2010年07月29号,星期四     阅读:1,299 次

现在的相册大多有这个功能,鼠标点在照片的左边,可以跳到上一张,点到右边则跳到下一张。
这就需要一个坐标点的计算:(鼠标相对图片的位置) 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:

标签: , ,

留下回复

):9:( ):8:( ):7:( ):6:( ):5:( ):4:( ):3:( ):2:( ):20:( ):1:( ):19:( ):18:( ):17:( ):16:( ):15:( ):14:( ):13:( ):12:( ):11:( ):10:(