2010-11-02 20 views

Répondre

9

[Working demo]

function interpolate(source,target,pos) { 
    return (source + (target - source) * pos); 
} 

function easing(pos) { 
    return (-Math.cos(pos * Math.PI)/2) + 0.5; 
} 

function scrollTop(duration) { 

    duration = duration || 1000; 

    var startY = window.pageYOffset, 
     start = Number(new Date()), 
     finish = start + duration; 

    var interval = setInterval(function() { 

    var now = Number(new Date()), 
     pos = (now > finish) ? 1 : (now - start)/duration; 

    scrollTo(0, interpolate(startY, 0, easing(pos))); 

    if (now > finish) 
     clearInterval(interval); 
    }, 15); 
};