Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Smooth scroll */
- Math.easeOut = function (t, b, c, d) { t /= d; return -c * t*(t-2) + b; };
- (function() { // do not mess global space
- var
- interval, // scroll is being eased
- mult = 0, // how fast do we scroll
- dir = 0, // 1 = scroll down, -1 = scroll up
- steps = 50, // how many steps in animation
- length = 30; // how long to animate
- function MouseWheelHandler(e) {
- e.preventDefault(); // prevent default browser scroll
- clearInterval(interval); // cancel previous animation
- ++mult; // we are going to scroll faster
- var delta = -Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
- if(dir!=delta) { // scroll direction changed
- mult = 1; // start slowly
- dir = delta;
- }
- for(var tgt=e.target; tgt!=document.documentElement; tgt=tgt.parentNode) {
- var oldScroll = tgt.scrollTop;
- tgt.scrollTop+= delta;
- if(oldScroll!=tgt.scrollTop) break;
- }
- var start = tgt.scrollTop;
- var end = start + length*mult*delta; // where to end the scroll
- var change = end - start; // base change in one step
- var step = 0; // current step
- interval = setInterval(function() {
- var pos = Math.easeOut(step++,start,change,steps);
- //window.scrollTo(0,pos);
- tgt.scrollTop = pos;
- if(step>=steps) { // scroll finished without speed up - stop by easing out
- mult = 0;
- clearInterval(interval);
- }
- },10);
- }
- window.addEventListener("mousewheel", MouseWheelHandler, false);
- window.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement