首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js兑现平滑跳转到锚点(Anchor)

2012-10-07 
js实现平滑跳转到锚点(Anchor)SCRIPT typetext/javascript // 说明 :用 Javascript 实现锚点(Anchor)间

js实现平滑跳转到锚点(Anchor)

<SCRIPT type=text/javascript> // 说明 :用 Javascript 实现锚点(Anchor)间平滑跳转 // 来源 :ThickBox 2.1 // 整理 :Yanfu Xie [xieyanfu@yahoo.com.cn] // 网址 :http://www.codebit.cn // 日期 :07.01.17 // 转换为数字 function intval(v) {     v = parseInt(v);     return isNaN(v) ? 0 : v; } // 获取元素信息 function getPos(e) {     var l = 0;     var t  = 0;     var w = intval(e.style.width);     var h = intval(e.style.height);     var wb = e.offsetWidth;     var hb = e.offsetHeight;     while (e.offsetParent){         l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);         t += e.offsetTop  + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);         e = e.offsetParent;     }     l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);     t  += e.offsetTop  + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);     return {x:l, y:t, w:w, h:h, wb:wb, hb:hb}; } // 获取滚动条信息 function getScroll()  {     var t, l, w, h;          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 }; } // 锚点(Anchor)间平滑跳转 function scroller(el, duration) {     if(typeof el != ’object’) { el = document.getElementById(el); }     if(!el) return;     var z = this;     z.el = el;     z.p = getPos(el);     z.s = getScroll();     z.clear = function(){window.clearInterval(z.timer);z.timer=null};     z.t=(new Date).getTime();     z.step = function(){         var t = (new Date).getTime();         var p = (t - z.t) / duration;         if (t >= duration + z.t) {             z.clear();             window.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 = window.setInterval(function(){z.step();},13); } </SCRIPT> 


调用方式:
scroller(el, duration) el:目标锚点 ID duration:持续时间,以毫秒为单位,越小越快

热点排行