Guest User

Untitled

a guest
Nov 23rd, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. Math.easeOutQuad = function (t, b, c, d) { t /= d; return -c * t*(t-2) + b; };
  2.  
  3. (function() { // do not mess global space
  4. var
  5. interval, // scroll is being eased
  6. mult = 0, // how fast do we scroll
  7. dir = 0, // 1 = scroll down, -1 = scroll up
  8. steps = 50, // how many steps in animation
  9. length = 30; // how long to animate
  10. function MouseWheelHandler(e) {
  11. e.preventDefault(); // prevent default browser scroll
  12. clearInterval(interval); // cancel previous animation
  13. ++mult; // we are going to scroll faster
  14. var delta = -Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); // cross-browser
  15. if(dir!=delta) { // scroll direction changed
  16. mult = 1; // start slowly
  17. dir = delta;
  18. }
  19. // in this cycle, we determine which element to scroll
  20. for(var tgt=e.target; tgt!=document.documentElement; tgt=tgt.parentNode) {
  21. var oldScroll = tgt.scrollTop;
  22. tgt.scrollTop+= delta;
  23. if(oldScroll!=tgt.scrollTop) break;
  24. // else the element can't be scrolled, try its parent in next iteration
  25. }
  26. var start = tgt.scrollTop;
  27. var end = start + length*mult*delta; // where to end the scroll
  28. var change = end - start; // base change in one step
  29. var step = 0; // current step
  30. interval = setInterval(function() {
  31. var pos = Math.easeOutQuad(step++,start,change,steps); // calculate next step
  32. tgt.scrollTop = pos; // scroll the target to next step
  33. if(step>=steps) { // scroll finished without speed up - stop animation
  34. mult = 0; // next scroll will start slowly
  35. clearInterval(interval);
  36. }
  37. },10);
  38. }
  39.  
  40. // nonstandard: Chrome, IE, Opera, Safari
  41. window.addEventListener("mousewheel", MouseWheelHandler, false);
  42. // nonstandard: Firefox
  43. window.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
  44. })();
Add Comment
Please, Sign In to add comment