/*
1.每次移动剩余距离的一半。简单的公式表示 nA = A - (A - B) / 2简单的公式表示 48 = 64 - (64 - 32) / 2我下一秒的位置 = 现在位置 - 现在和初恋之间距离的一半*/window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function( callback ){ window.setTimeout(callback, 1000 / 60); }; })();function backToTop(start, end, rate, callback){ if(start == end || typeof start != "number") return; var doc = document.documentElement.scrollTop ? document.document : document.body; var step = function(){ start = start - (start - end) / rate; if(Math.abs(start-end) < 1){ doc.scrollTop = 0; if(callback){ callback(); } return; } doc.scrollTop = start; requestAnimationFrame(step); } step();}function getScroll(){ if(window.pageXOffset != undefined){ return { x : window.pageXOffset, y : window.pageYOffset } } if(document.compatMode == "CSS1Compat"){ return { x : document.documentElement.scrollLeft, y : document.documentElement.scrollTop } } return { x : document.body.scrollLeft, y : document.body.scrollTop }}
调用
clock.onclick = function(){ var offsetY = getScroll().y; backToTop(offsetY, 0, 4, function(){ console.log("回到顶部了") });}