1 (function($){ 2 $.fn.scroller = function(options){ 3 var defaultVal = { 4 duration:500 5 }; 6 var obj = $.extend({},defaultVal,options); 7 var el = options.el; 8 var duration = options.duration; 9 return this.each(function(){ 10 if(typeof el != 'object') { 11 el = document.getElementById(el); 12 } 13 if(!el) return; 14 var z = this; 15 z.el = el; 16 z.p = getPos(el); 17 z.s = getScroll(); 18 z.clear = function(){ 19 window.clearInterval(z.timer);z.timer=null 20 }; 21 z.t=(new Date).getTime(); 22 z.step = function(){ 23 var t = (new Date).getTime(); 24 var p = (t - z.t) / duration; 25 if (t >= duration + z.t) { 26 z.clear(); 27 window.setTimeout(function(){z.scroll(z.p.y, z.p.x)},13); 28 } else { 29 st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t; 30 sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l; 31 z.scroll(st, sl); 32 } 33 }; 34 z.scroll = function (t, l){ 35 window.scrollTo(l, t) 36 }; 37 z.timer = window.setInterval(function(){z.step();},13); 38 }); 39 }; 40 41 function intval(v) 42 { 43 v = parseInt(v); 44 return isNaN(v) ? 0 : v; 45 } 46 47 // 获取元素信息 48 function getPos(e) 49 { 50 var l = 0; 51 var t = 0; 52 var w = intval(e.style.width); 53 var h = intval(e.style.height); 54 var wb = e.offsetWidth; 55 var hb = e.offsetHeight; 56 while (e.offsetParent){ 57 l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0); 58 t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0); 59 e = e.offsetParent; 60 } 61 l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0); 62 t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0); 63 return {x:l, y:t, w:w, h:h, wb:wb, hb:hb}; 64 } 65 // 获取滚动条信息 66 function getScroll() 67 { 68 var t, l, w, h; 69 if (document.documentElement && document.documentElement.scrollTop) { 70 t = document.documentElement.scrollTop; 71 l = document.documentElement.scrollLeft; 72 w = document.documentElement.scrollWidth; 73 h = document.documentElement.scrollHeight; 74 } else if (document.body) { 75 t = document.body.scrollTop; 76 l = document.body.scrollLeft; 77 w = document.body.scrollWidth; 78 h = document.body.scrollHeight; 79 } 80 return { t: t, l: l, w: w, h: h }; 81 } 116 })(jQuery) 117 118 $(function(){ 119 $('#goto').click(function(){ 120 $(this).scroller( 121 { 122 el:'t1', 123 duration:1000 124 } 125 ); 126 }); 127 })