2010-7-29 Update:
在第一种实现方案中,如果图片的父元素设置了padding、margin之后,就会使得FF、Chrome等逻辑判断失误,而IE还完好。
———————-纠错分界线————————–
说“图片导航”或许很迷糊,我也迷糊不知道怎么描述,就是类似于Google、QQ空间、百度图片搜索中的在图片中出现上下箭头或者左右箭头来指示下一个和上一个图片的功能。昨天同事问到我这方面的实现方式,也就暂时想了两种。
之前查看过Google的方法是在图片上添加两个HTML元素作为逻辑操作对象(包括切换鼠标样式、点击事件等),这样就显得比较复杂了,需要确定图片的在页面中的位置、图片的宽高、之后还要判断鼠标的位置……QQ空间的相册导航,是在图片本身来操作逻辑的,这同我第一种方案很类似,而百度图片搜索结果页中图片导航是在图片的父元素中做逻辑的,这样就避免了图片大小对导航的干扰的问题(主要是如果图片太小,在图片上做导航就显得迷糊了,特别是鼠标的样式切换)。下面来说说我的方法。
第一种,直接在图片上做逻辑。事件参数e有这么两个参数,在FF等浏览器下是layerX,layerY,在IE下是offsetX,offsetY,用于在一个DOM元素触发事件的时候,鼠标在该元素上的偏移量。这个是好方法啊,在结合offsetHeight和offsetWidth,就可以直接在图片上做判断了,给图片添加mousemove、onclick事件来处理鼠标样式切换、点击事件逻辑等等。《测试用例1》,可是这种方法的一个缺点是:在IE6下,当鼠标移动到鼠标的时候,会默认的弹出一个框,很杯具。
第二中方式就是根据上面的技巧,在图片上覆盖一个div(或者其他的能覆盖的元素都成),覆盖就得获取到图片在页面中的坐标以及宽高了,通过offsetLeft和offsetTop可以方便的得到,兼容性也还好,对于不是非常复杂的DOM结构和CSS布局,应该都是没啥问题的。《测试用例》,这样就避免了IE6下弹出框的问题。不过这样代码就得写多几行了。
具体的实现方式可以查看上面给出了两个实例。
呵呵,学习一下
mousemove这样不太好吧,每次移动都促发,直接click的时候就可以算啊~
另外还要考虑图片本身的偏移量~
Supersha 回复:
七月 29th, 2010 at 12:29 上午
mousemove主要是为了改变鼠标的样式,获取鼠标指针相对于图片的偏移,在click事件中来判断也是可以的
如果是直接在图片上做逻辑,图片本身的偏移量就不需要考虑了,通过layerX和offsetX本身就是获得鼠标相对于触发事件的元素的偏移量,主要是获得图片的宽高就行了
恩~我以前做的时候mousemove算了位置换鼠标样式,click也算了位置提示位置,还是这样好一些。
第二个问题,你给body加个padding试试,判断出错了
Supersha 回复:
七月 29th, 2010 at 2:13 下午
在图片中直接添加逻辑,确实会造成判断失误。如果在图片的父元素中添加margin、padding,就会造成失误