Template:Fudan jquery.hovertreescroll
jQuery.getPos=function(e){var l=0;var t=0;var w=jQuery.intval(jQuery.css(e,"width"));var h=jQuery.intval(jQuery.css(e,"height"));var wb=e.offsetWidth;var hb=e.offsetHeight;while(e.offsetParent){l+=e.offsetLeft+(e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);t+=e.offsetTop+(e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);e=e.offsetParent}l+=e.offsetLeft+(e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);t+=e.offsetTop+(e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);return{x:l,y:t,w:w,h:h,wb:wb,hb:hb}};jQuery.getClient=function(e){if(e){w=e.clientWidth;h=e.clientHeight}else{w=(window.innerWidth)?window.innerWidth:(document.documentElement&&document.documentElement.clientWidth)?document.documentElement.clientWidth:document.body.offsetWidth;h=(window.innerHeight)?window.innerHeight:(document.documentElement&&document.documentElement.clientHeight)?document.documentElement.clientHeight:document.body.offsetHeight}return{w:w,h:h}};jQuery.getScroll=function(e){if(e){t=e.scrollTop;l=e.scrollLeft;w=e.scrollWidth;h=e.scrollHeight}else{if(document.documentElement&&document.documentElement.scrollTop){t=document.documentElement.scrollTop;l=document.documentElement.scrollLeft;w=document.documentElement.scrollWidth;h=document.documentElement.scrollHeight}else{if(document.body){t=document.body.scrollTop;l=document.body.scrollLeft;w=document.body.scrollWidth;h=document.body.scrollHeight}}}return{t:t,l:l,w:w,h:h}};jQuery.intval=function(v){v=parseInt(v);return isNaN(v)?0:v};jQuery.fn.HoverTreeScroll=function(s){o=jQuery.speed(s);return this.each(function(){new jQuery.fx.HoverTreeScroll(this,o)})};jQuery.fx.HoverTreeScroll=function(e,o){var z=this;z.o=o;z.e=e;z.p=jQuery.getPos(e);z.s=jQuery.getScroll();z.clear=function(){clearInterval(z.timer);z.timer=null};z.t=(new Date).getTime();z.step=function(){var t=(new Date).getTime();var p=(t-z.t)/z.o.duration;if(t>=z.o.duration+z.t){z.clear();setTimeout(function(){z.scroll(z.p.y,z.p.x)},13)}else{st=((-Math.cos(p*Math.PI)/2)+0.5)*(z.p.y-z.s.t)+z.s.t;sl=((-Math.cos(p*Math.PI)/2)+0.5)*(z.p.x-z.s.l)+z.s.l;z.scroll(st,sl)}};z.scroll=function(t,l){window.scrollTo(l,t)};z.timer=setInterval(function(){z.step()},13)};