此效果来自蓝色理想,这里我只是放个Demo,方便自己以后研究。
我已在代码中添加了比较详细的注释,在这里我只提几点:
1.
ie =!+'\v1' //号称史上最短的IE判断,的确够短的!!
2.
var b = el.getBoundingClientRect();
这里的getBoundingClinetRect()方法以前是IE Only的,但是现在FF3.0+和Opera9.5+已经支持了该方法。该方法获得页面中某个元素的左,上,右和下便边框分别相对浏览器视窗的位置。看图就直观点:
注意第二张图移动了scroll!!
更多可以看:http://www.cnblogs.com/qieqing/archive/2008/10/06/1304399.html
3.Demo中运用了下面方式:
var tmp = d.createElement(t||'div');
var e = e || event,x=e.pageX||e.clientX+dd.scrollLeft,y=e.pageY||e.clientY+dd.scrollTop;
说明下这是种简写的方式吧,具体就是||的运算顺序和机制吧。||首先会计算左边的表达式,如果为真那么就会忽略右边的表达式,因为||只要是一个表达式为真那么整个式子必为真,既然左边的已经为真了,右边的就无关紧要了。这是我的理解。&&也是类似的。
4.关于条件运算符
举例说明,如下面的代码
scrolly = y - divup.offsetHeight/2 < top ? 0 : y + divup.offsetHeight/2>img.height+top ? img.height - divup.offsetHeight : scrolly;
很长,它的作用是判断zoomup是否高过了父元素的上边或者低过了父元素的下边。
y - divup.offsetHeight/2 <top如果为真,说明zoomup的已经高出了父元素的上边,就将0赋给scrolly,忽略后面的;否则开始计算后面的式子,判断zomup是否过高。就是相当于
scrolly = y - divup.offsetHeight/2 < top ? 0 : (y + divup.offsetHeight/2>img.height+top ?( img.height - divup.offsetHeight ) : scrolly;)