Smoth scroll for Chrome

function ssc_init() { if (!document.body) return; var e = document.body; var t = document.documentElement; var n = window.innerHeight; var r = e.scrollHeight; ssc_root = document.compatMode.indexOf("CSS") >= 0 ? t : e; ssc_activeElement = e; ssc_initdone = true; if (top != self) ssc_frame = true; else if (r > n && (e.offsetHeight <= n || t.offsetHeight <= n)) { ssc_root.style.height = "auto"; if (ssc_root.offsetHeight <= n) { var i = document.createElement("div"); i.style.clear = "both"; e.appendChild(i) } } if (!ssc_fixedback) { e.style.backgroundAttachment = "scroll"; t.style.backgroundAttachment = "scroll" } if (ssc_keyboardsupport) ssc_addEvent("keydown", ssc_keydown); } function ssc_scrollArray(e, t, n, r) { r || (r = 1e3); ssc_directionCheck(t, n); ssc_que.push({ x: t, y: n, lastX: t < 0 ? .99 : -.99, lastY: n < 0 ? .99 : -.99, start: +(new Date) }); if (ssc_pending) return; var i = function () { var s = +(new Date); var o = 0; var u = 0; for (var a = 0; a < ssc_que.length; a++) { var f = ssc_que[a]; var l = s - f.start; var c = l >= ssc_animtime; var h = c ? 1 : l / ssc_animtime; if (ssc_pulseAlgorithm) { h = ssc_pulse(h) } var p = f.x * h - f.lastX >> 0; var d = f.y * h - f.lastY >> 0; o += p; u += d; f.lastX += p; f.lastY += d; if (c) { ssc_que.splice(a, 1); a-- } } if (t) { var v = e.scrollLeft; e.scrollLeft += o; if (o && e.scrollLeft === v) { t = 0 } } if (n) { var m = e.scrollTop; e.scrollTop += u; if (u && e.scrollTop === m) { n = 0 } } if (!t && !n) ssc_que = []; if (ssc_que.length) setTimeout(i, r / ssc_framerate + 1); else ssc_pending = false; }; setTimeout(i, 0); ssc_pending = true } function ssc_wheel(e) { if (!ssc_initdone) { ssc_init() } var t = e.target; var n = ssc_overflowingAncestor(t); if (!n || e.defaultPrevented || ssc_isNodeName(ssc_activeElement, "embed") || ssc_isNodeName(t, "embed") && /\.pdf/i.test(t.src)) { return true } var r = e.wheelDeltaX || 0; var i = e.wheelDeltaY || 0; if (!r && !i) i = e.wheelDelta || 0; if (Math.abs(r) > 1.2) r *= ssc_stepsize / 120; if (Math.abs(i) > 1.2) i *= ssc_stepsize / 120; ssc_scrollArray(n, -r, -i); e.preventDefault() } function ssc_keydown(e) { var t = e.target; var n = e.ctrlKey || e.altKey || e.metaKey; if (/input|textarea|embed/i.test(t.nodeName) || t.isContentEditable || e.defaultPrevented || n) return true; if (ssc_isNodeName(t, "button") && e.keyCode === ssc_key.spacebar) return true; var r, i = 0, s = 0; var o = ssc_overflowingAncestor(ssc_activeElement); var u = o.clientHeight; if (o == document.body) u = window.innerHeight; switch (e.keyCode) { case ssc_key.up: s = -ssc_arrowscroll; break; case ssc_key.down: s = ssc_arrowscroll; break; case ssc_key.spacebar: r = e.shiftKey ? 1 : -1; s = -r * u * .9; break; case ssc_key.pageup: s = -u * .9; break; case ssc_key.pagedown: s = u * .9; break; case ssc_key.home: s = -o.scrollTop; break; case ssc_key.end: var a = o.scrollHeight - o.scrollTop - u; s = a > 0 ? a + 10 : 0; break; case ssc_key.left: i = -ssc_arrowscroll; break; case ssc_key.right: i = ssc_arrowscroll; break; default: return true } ssc_scrollArray(o, i, s); e.preventDefault() } function ssc_mousedown(e) { ssc_activeElement = e.target } function ssc_setCache(e, t) { for (var n = e.length; n--;) ssc_cache[ssc_uniqueID(e[n])] = t; return t } function ssc_overflowingAncestor(e) { var t = []; var n = ssc_root.scrollHeight; do { var r = ssc_cache[ssc_uniqueID(e)]; if (r) { return ssc_setCache(t, r) } t.push(e); if (n === e.scrollHeight) { if (!ssc_frame || ssc_root.clientHeight + 10 < n) { return ssc_setCache(t, document.body) } } else if (e.clientHeight + 10 < e.scrollHeight) { overflow = getComputedStyle(e, "").getPropertyValue("overflow"); if (overflow === "scroll" || overflow === "auto") { return ssc_setCache(t, e) } } } while (e = e.parentNode) } function ssc_addEvent(e, t, n) { window.addEventListener(e, t, n || false) } function ssc_removeEvent(e, t, n) { window.removeEventListener(e, t, n || false) } function ssc_isNodeName(e, t) { return e.nodeName.toLowerCase() === t.toLowerCase() } function ssc_directionCheck(e, t) { e = e > 0 ? 1 : -1; t = t > 0 ? 1 : -1; if (ssc_direction.x !== e || ssc_direction.y !== t) { ssc_direction.x = e; ssc_direction.y = t; ssc_que = [] } } function ssc_pulse_(e) { var t, n, r; e = e * ssc_pulseScale; if (e < 1) { t = e - (1 - Math.exp(-e)) } else { n = Math.exp(-1); e -= 1; r = 1 - Math.exp(-e); t = n + r * (1 - n) } return t * ssc_pulseNormalize } function ssc_pulse(e) { if (e >= 1) return 1; if (e <= 0) return 0; if (ssc_pulseNormalize == 1) { ssc_pulseNormalize /= ssc_pulse_(1) } return ssc_pulse_(e) } var ssc_framerate = 150; var ssc_animtime = 500; var ssc_stepsize = 150; var ssc_pulseAlgorithm = true; var ssc_pulseScale = 6; var ssc_pulseNormalize = 1; var ssc_keyboardsupport = true; var ssc_arrowscroll = 50; var ssc_frame = false; var ssc_direction = { x: 0, y: 0 }; var ssc_initdone = false; var ssc_fixedback = true; var ssc_root = document.documentElement; var ssc_activeElement; var ssc_key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 }; var ssc_que = []; var ssc_pending = false; var ssc_cache = {}; setInterval(function () { ssc_cache = {} }, 10 * 1e3); var ssc_uniqueID = function () { var e = 0; return function (t) { return t.ssc_uniqueID || (t.ssc_uniqueID = e++) } }(); var ischrome = /chrome/.test(navigator.userAgent.toLowerCase()); if (ischrome) { ssc_addEvent("mousedown", ssc_mousedown); ssc_addEvent("mousewheel", ssc_wheel); ssc_addEvent("load", ssc_init) }
Copyright (c) 2015 Bryan Lusica

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.