缓动小算法

/*
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("回到顶部了")
    });
}
原文地址:https://www.cnblogs.com/alantao/p/7463149.html