1 Math.easeout = function (A, B, rate, callback) { 2 if (A == B || typeof A != 'number') { 3 return; 4 } 5 B = B || 0; 6 rate = rate || 2; 7 8 var step = function () { 9 A = A + (B - A) / rate; 10 11 if (A < 1) { 12 callback(B, true); 13 return; 14 } 15 callback(A, false); 16 setTimeout(step,100); 17 }; 18 step(); 19 }; 20 /* 21 其中: 22 A是起始位置; 23 B是目标位置; 24 rate是缓动速率; 25 callback是变化的位置回调,支持两个参数,value和isEnding,表示当前的位置值(数值)以及是否动画结束了(布尔值); 26 于是,我们的返回顶部效果可以这么使用: 27 */ 28 var doc = document.body.scrollTop? document.body : document.getElementById("box-2"); 29 doc.onclick = function(){ 30 Math.easeout(doc.scrollTop, 0, 4, function (value) { 31 doc.scrollTop = value; 32 }); 33 }