JAVASCRIPT   56

SmoothScroll

Guest on 27th June 2022 04:07:25 PM

  1. // SmoothScroll for websites v1.2.1
  2. // Licensed under the terms of the MIT license.
  3. // People involved
  4. //  - Balazs Galambosi (maintainer)  
  5. //  - Michael Herf     (Pulse Algorithm)
  6. ! function() {
  7.     function e() {
  8.         var e = !1;
  9.         e && c("keydown", r), v.keyboardSupport && !e && u("keydown", r)
  10.     }
  11.  
  12.     function t() {
  13.         if (document.body) {
  14.             var t = document.body,
  15.                 o = document.documentElement,
  16.                 n = window.innerHeight,
  17.                 r = t.scrollHeight;
  18.             if (S = document.compatMode.indexOf("CSS") >= 0 ? o : t, w = t, e(), x = !0, top != self) y = !0;
  19.             else if (r > n && (t.offsetHeight <= n || o.offsetHeight <= n)) {
  20.                 var a = !1,
  21.                     i = function() {
  22.                         a || o.scrollHeight == document.height || (a = !0, setTimeout(function() {
  23.                             o.style.height = document.height + "px", a = !1
  24.                         }, 500))
  25.                     };
  26.                 if (o.style.height = "auto", setTimeout(i, 10), S.offsetHeight <= n) {
  27.                     var l = document.createElement("div");
  28.                     l.style.clear = "both", t.appendChild(l)
  29.                 }
  30.             }
  31.             v.fixedBackground || b || (t.style.backgroundAttachment = "scroll", o.style.backgroundAttachment = "scroll")
  32.         }
  33.     }
  34.  
  35.     function o(e, t, o, n) {
  36.         if (n || (n = 1e3), d(t, o), 1 != v.accelerationMax) {
  37.             var r = +new Date,
  38.                 a = r - C;
  39.             if (a < v.accelerationDelta) {
  40.                 var i = (1 + 30 / a) / 2;
  41.                 i > 1 && (i = Math.min(i, v.accelerationMax), t *= i, o *= i)
  42.             }
  43.             C = +new Date
  44.         }
  45.         if (M.push({
  46.                 x: t,
  47.                 y: o,
  48.                 lastX: 0 > t ? .99 : -.99,
  49.                 lastY: 0 > o ? .99 : -.99,
  50.                 start: +new Date
  51.             }), !T) {
  52.             var l = e === document.body,
  53.                 u = function() {
  54.                     for (var r = +new Date, a = 0, i = 0, c = 0; c < M.length; c++) {
  55.                         var s = M[c],
  56.                             d = r - s.start,
  57.                             f = d >= v.animationTime,
  58.                             h = f ? 1 : d / v.animationTime;
  59.                         v.pulseAlgorithm && (h = p(h));
  60.                         var m = s.x * h - s.lastX >> 0,
  61.                             w = s.y * h - s.lastY >> 0;
  62.                         a += m, i += w, s.lastX += m, s.lastY += w, f && (M.splice(c, 1), c--)
  63.                     }
  64.                     l ? window.scrollBy(a, i) : (a && (e.scrollLeft += a), i && (e.scrollTop += i)), t || o || (M = []), M.length ? E(u, e, n / v.frameRate + 1) : T = !1
  65.                 };
  66.             E(u, e, 0), T = !0
  67.         }
  68.     }
  69.  
  70.     function n(e) {
  71.         x || t();
  72.         var n = e.target,
  73.             r = l(n);
  74.         if (!r || e.defaultPrevented || s(w, "embed") || s(n, "embed") && /\.pdf/i.test(n.src)) return !0;
  75.         var a = e.wheelDeltaX || 0,
  76.             i = e.wheelDeltaY || 0;
  77.         return a || i || (i = e.wheelDelta || 0), !v.touchpadSupport && f(i) ? !0 : (Math.abs(a) > 1.2 && (a *= v.stepSize / 120), Math.abs(i) > 1.2 && (i *= v.stepSize / 120), o(r, -a, -i), void e.preventDefault())
  78.     }
  79.  
  80.     function r(e) {
  81.         var t = e.target,
  82.             n = e.ctrlKey || e.altKey || e.metaKey || e.shiftKey && e.keyCode !== H.spacebar;
  83.         if (/input|textarea|select|embed/i.test(t.nodeName) || t.isContentEditable || e.defaultPrevented || n) return !0;
  84.         if (s(t, "button") && e.keyCode === H.spacebar) return !0;
  85.         var r, a = 0,
  86.             i = 0,
  87.             u = l(w),
  88.             c = u.clientHeight;
  89.         switch (u == document.body && (c = window.innerHeight), e.keyCode) {
  90.             case H.up:
  91.                 i = -v.arrowScroll;
  92.                 break;
  93.             case H.down:
  94.                 i = v.arrowScroll;
  95.                 break;
  96.             case H.spacebar:
  97.                 r = e.shiftKey ? 1 : -1, i = -r * c * .9;
  98.                 break;
  99.             case H.pageup:
  100.                 i = .9 * -c;
  101.                 break;
  102.             case H.pagedown:
  103.                 i = .9 * c;
  104.                 break;
  105.             case H.home:
  106.                 i = -u.scrollTop;
  107.                 break;
  108.             case H.end:
  109.                 var d = u.scrollHeight - u.scrollTop - c;
  110.                 i = d > 0 ? d + 10 : 0;
  111.                 break;
  112.             case H.left:
  113.                 a = -v.arrowScroll;
  114.                 break;
  115.             case H.right:
  116.                 a = v.arrowScroll;
  117.                 break;
  118.             default:
  119.                 return !0
  120.         }
  121.         o(u, a, i), e.preventDefault()
  122.     }
  123.  
  124.     function a(e) {
  125.         w = e.target
  126.     }
  127.  
  128.     function i(e, t) {
  129.         for (var o = e.length; o--;) z[N(e[o])] = t;
  130.         return t
  131.     }
  132.  
  133.     function l(e) {
  134.         var t = [],
  135.             o = S.scrollHeight;
  136.         do {
  137.             var n = z[N(e)];
  138.             if (n) return i(t, n);
  139.             if (t.push(e), o === e.scrollHeight) {
  140.                 if (!y || S.clientHeight + 10 < o) return i(t, document.body)
  141.             } else if (e.clientHeight + 10 < e.scrollHeight && (overflow = getComputedStyle(e, "").getPropertyValue("overflow-y"), "scroll" === overflow || "auto" === overflow)) return i(t, e)
  142.         } while (e = e.parentNode)
  143.     }
  144.  
  145.     function u(e, t, o) {
  146.         window.addEventListener(e, t, o || !1)
  147.     }
  148.  
  149.     function c(e, t, o) {
  150.         window.removeEventListener(e, t, o || !1)
  151.     }
  152.  
  153.     function s(e, t) {
  154.         return (e.nodeName || "").toLowerCase() === t.toLowerCase()
  155.     }
  156.  
  157.     function d(e, t) {
  158.         e = e > 0 ? 1 : -1, t = t > 0 ? 1 : -1, (k.x !== e || k.y !== t) && (k.x = e, k.y = t, M = [], C = 0)
  159.     }
  160.  
  161.     function f(e) {
  162.         if (e) {
  163.             e = Math.abs(e), D.push(e), D.shift(), clearTimeout(A);
  164.             var t = D[0] == D[1] && D[1] == D[2],
  165.                 o = h(D[0], 120) && h(D[1], 120) && h(D[2], 120);
  166.             return !(t || o)
  167.         }
  168.     }
  169.  
  170.     function h(e, t) {
  171.         return Math.floor(e / t) == e / t
  172.     }
  173.  
  174.     function m(e) {
  175.         var t, o, n;
  176.         return e *= v.pulseScale, 1 > e ? t = e - (1 - Math.exp(-e)) : (o = Math.exp(-1), e -= 1, n = 1 - Math.exp(-e), t = o + n * (1 - o)), t * v.pulseNormalize
  177.     }
  178.  
  179.     function p(e) {
  180.         return e >= 1 ? 1 : 0 >= e ? 0 : (1 == v.pulseNormalize && (v.pulseNormalize /= m(1)), m(e))
  181.     }
  182.     var w, g = {
  183.             frameRate: 150,
  184.             animationTime: 800,
  185.             stepSize: 120,
  186.             pulseAlgorithm: !0,
  187.             pulseScale: 8,
  188.             pulseNormalize: 1,
  189.             accelerationDelta: 20,
  190.             accelerationMax: 1,
  191.             keyboardSupport: !0,
  192.             arrowScroll: 50,
  193.             touchpadSupport: !0,
  194.             fixedBackground: !0,
  195.             excluded: ""
  196.         },
  197.         v = g,
  198.         b = !1,
  199.         y = !1,
  200.         k = {
  201.             x: 0,
  202.             y: 0
  203.         },
  204.         x = !1,
  205.         S = document.documentElement,
  206.         D = [120, 120, 120],
  207.         H = {
  208.             left: 37,
  209.             up: 38,
  210.             right: 39,
  211.             down: 40,
  212.             spacebar: 32,
  213.             pageup: 33,
  214.             pagedown: 34,
  215.             end: 35,
  216.             home: 36
  217.         },
  218.         v = g,
  219.         M = [],
  220.         T = !1,
  221.         C = +new Date,
  222.         z = {};
  223.     setInterval(function() {
  224.         z = {}
  225.     }, 1e4);
  226.     var A, N = function() {
  227.             var e = 0;
  228.             return function(t) {
  229.                 return t.uniqueID || (t.uniqueID = e++)
  230.             }
  231.         }(),
  232.         E = function() {
  233.             return window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(e, t, o) {
  234.                 window.setTimeout(e, o || 1e3 / 60)
  235.             }
  236.         }(),
  237.         K = /chrome/i.test(window.navigator.userAgent),
  238.         L = "onmousewheel" in document;
  239.     L && K && (u("mousedown", a), u("mousewheel", n), u("load", t))
  240. }();

Raw Paste


Login or Register to edit or fork this paste. It's free.