File: /home/nhqyemt2u0zd/public_html/wp-content/themes/kitgreen1.1.0/assets/js/dev/scoll.js
! function() {
function initTest() {
options.keyboardSupport && addEvent("keydown", keydown)
}
function init() {
if (!initDone && document.body) {
initDone = !0;
var body = document.body,
html = document.documentElement,
windowHeight = window.innerHeight,
scrollHeight = body.scrollHeight;
if (root = document.compatMode.indexOf("CSS") >= 0 ? html : body, activeElement = body, initTest(), top != self) isFrame = !0;
else if (scrollHeight > windowHeight && (body.offsetHeight <= windowHeight || html.offsetHeight <= windowHeight)) {
var fullPageElem = document.createElement("div");
fullPageElem.style.cssText = "position:absolute; z-index:-10000; top:0; left:0; right:0; height:" + root.scrollHeight + "px", document.body.appendChild(fullPageElem);
var pendingRefresh;
refreshSize = function() {
pendingRefresh || (pendingRefresh = setTimeout(function() {
isExcluded || (fullPageElem.style.height = "0", fullPageElem.style.height = root.scrollHeight + "px", pendingRefresh = null)
}, 500))
}, setTimeout(refreshSize, 10), addEvent("resize", refreshSize);
var config = {
attributes: !0,
childList: !0,
characterData: !1
};
if (observer = new MutationObserver(refreshSize), observer.observe(body, config), root.offsetHeight <= windowHeight) {
var clearfix = document.createElement("div");
clearfix.style.clear = "both", body.appendChild(clearfix)
}
}
options.fixedBackground || isExcluded || (body.style.backgroundAttachment = "scroll", html.style.backgroundAttachment = "scroll")
}
}
function cleanup() {
observer && observer.disconnect(), removeEvent(wheelEvent, wheel), removeEvent("mousedown", mousedown), removeEvent("keydown", keydown), removeEvent("resize", refreshSize), removeEvent("load", init)
}
function scrollArray(elem, left, top) {
if (directionCheck(left, top), 1 != options.accelerationMax) {
var now = Date.now(),
elapsed = now - lastScroll;
if (elapsed < options.accelerationDelta) {
var factor = (1 + 50 / elapsed) / 2;
factor > 1 && (factor = Math.min(factor, options.accelerationMax), left *= factor, top *= factor)
}
lastScroll = Date.now()
}
if (que.push({
x: left,
y: top,
lastX: 0 > left ? .99 : -.99,
lastY: 0 > top ? .99 : -.99,
start: Date.now()
}), !pending) {
var scrollWindow = elem === document.body,
step = function(time) {
for (var now = Date.now(), scrollX = 0, scrollY = 0, i = 0; i < que.length; i++) {
var item = que[i],
elapsed = now - item.start,
finished = elapsed >= options.animationTime,
position = finished ? 1 : elapsed / options.animationTime;
options.pulseAlgorithm && (position = pulse(position));
var x = item.x * position - item.lastX >> 0,
y = item.y * position - item.lastY >> 0;
scrollX += x, scrollY += y, item.lastX += x, item.lastY += y, finished && (que.splice(i, 1), i--)
}
scrollWindow ? window.scrollBy(scrollX, scrollY) : (scrollX && (elem.scrollLeft += scrollX), scrollY && (elem.scrollTop += scrollY)), left || top || (que = []), que.length ? requestFrame(step, elem, 1e3 / options.frameRate + 1) : pending = !1
};
requestFrame(step, elem, 0), pending = !0
}
}
function wheel(event) {
initDone || init();
var target = event.target,
overflowing = overflowingAncestor(target);
if (!overflowing || event.defaultPrevented || event.ctrlKey) return !0;
if (isNodeName(activeElement, "embed") || isNodeName(target, "embed") && /\.pdf/i.test(target.src) || isNodeName(activeElement, "object")) return !0;
var deltaX = -event.wheelDeltaX || event.deltaX || 0,
deltaY = -event.wheelDeltaY || event.deltaY || 0;
return isMac && (options.touchpadSupport = !1, event.wheelDeltaX && isDivisible(event.wheelDeltaX, 120) && (deltaX = -120 * (event.wheelDeltaX / Math.abs(event.wheelDeltaX))), event.wheelDeltaY && isDivisible(event.wheelDeltaY, 120) && (deltaY = -120 * (event.wheelDeltaY / Math.abs(event.wheelDeltaY)))), deltaX || deltaY || (deltaY = -event.wheelDelta || 0), 1 === event.deltaMode && (deltaX *= 40, deltaY *= 40), !options.touchpadSupport && isTouchpad(deltaY) ? !0 : (Math.abs(deltaX) > 1.2 && (deltaX *= options.stepSize / 120), Math.abs(deltaY) > 1.2 && (deltaY *= options.stepSize / 120), scrollArray(overflowing, deltaX, deltaY), event.preventDefault(), void scheduleClearCache())
}
function keydown(event) {
var target = event.target,
modifier = event.ctrlKey || event.altKey || event.metaKey || event.shiftKey && event.keyCode !== key.spacebar;
document.body.contains(activeElement) || (activeElement = document.activeElement);
var inputNodeNames = /^(textarea|select|embed|object)$/i,
buttonTypes = /^(button|submit|radio|checkbox|file|color|image)$/i;
if (inputNodeNames.test(target.nodeName) || isNodeName(target, "input") && !buttonTypes.test(target.type) || isNodeName(activeElement, "video") || isInsideYoutubeVideo(event) || target.isContentEditable || event.defaultPrevented || modifier) return !0;
if ((isNodeName(target, "button") || isNodeName(target, "input") && buttonTypes.test(target.type)) && event.keyCode === key.spacebar) return !0;
var shift, x = 0,
y = 0,
elem = overflowingAncestor(activeElement),
clientHeight = elem.clientHeight;
switch (elem == document.body && (clientHeight = window.innerHeight), event.keyCode) {
case key.up:
y = -options.arrowScroll;
break;
case key.down:
y = options.arrowScroll;
break;
case key.spacebar:
shift = event.shiftKey ? 1 : -1, y = -shift * clientHeight * .9;
break;
case key.pageup:
y = .9 * -clientHeight;
break;
case key.pagedown:
y = .9 * clientHeight;
break;
case key.home:
y = -elem.scrollTop;
break;
case key.end:
var damt = elem.scrollHeight - elem.scrollTop - clientHeight;
y = damt > 0 ? damt + 10 : 0;
break;
case key.left:
x = -options.arrowScroll;
break;
case key.right:
x = options.arrowScroll;
break;
default:
return !0
}
scrollArray(elem, x, y), event.preventDefault(), scheduleClearCache()
}
function mousedown(event) {
activeElement = event.target
}
function scheduleClearCache() {
clearTimeout(clearCacheTimer), clearCacheTimer = setInterval(function() {
cache = {}
}, 1e3)
}
function setCache(elems, overflowing) {
for (var i = elems.length; i--;) cache[uniqueID(elems[i])] = overflowing;
return overflowing
}
function overflowingAncestor(el) {
var elems = [],
body = document.body,
rootScrollHeight = root.scrollHeight;
do {
var cached = cache[uniqueID(el)];
if (cached) return setCache(elems, cached);
if (elems.push(el), rootScrollHeight === el.scrollHeight) {
var topOverflowsNotHidden = overflowNotHidden(root) && overflowNotHidden(body),
isOverflowCSS = topOverflowsNotHidden || overflowAutoOrScroll(root);
if (isFrame && isContentOverflowing(root) || !isFrame && isOverflowCSS) return setCache(elems, getScrollRoot())
} else if (isContentOverflowing(el) && overflowAutoOrScroll(el)) return setCache(elems, el)
} while (el = el.parentElement)
}
function isContentOverflowing(el) {
return el.clientHeight + 10 < el.scrollHeight
}
function overflowNotHidden(el) {
var overflow = getComputedStyle(el, "").getPropertyValue("overflow-y");
return "hidden" !== overflow
}
function overflowAutoOrScroll(el) {
var overflow = getComputedStyle(el, "").getPropertyValue("overflow-y");
return "scroll" === overflow || "auto" === overflow
}
function addEvent(type, fn) {
window.addEventListener(type, fn, !1)
}
function removeEvent(type, fn) {
window.removeEventListener(type, fn, !1)
}
function isNodeName(el, tag) {
return (el.nodeName || "").toLowerCase() === tag.toLowerCase()
}
function directionCheck(x, y) {
x = x > 0 ? 1 : -1, y = y > 0 ? 1 : -1, direction.x === x && direction.y === y || (direction.x = x, direction.y = y, que = [], lastScroll = 0)
}
function isTouchpad(deltaY) {
return deltaY ? (deltaBuffer.length || (deltaBuffer = [deltaY, deltaY, deltaY]), deltaY = Math.abs(deltaY), deltaBuffer.push(deltaY), deltaBuffer.shift(), clearTimeout(deltaBufferTimer), deltaBufferTimer = setTimeout(function() {
window.localStorage && (localStorage.SS_deltaBuffer = deltaBuffer.join(","))
}, 1e3), !allDeltasDivisableBy(120) && !allDeltasDivisableBy(100)) : void 0
}
function isDivisible(n, divisor) {
return Math.floor(n / divisor) == n / divisor
}
function allDeltasDivisableBy(divisor) {
return isDivisible(deltaBuffer[0], divisor) && isDivisible(deltaBuffer[1], divisor) && isDivisible(deltaBuffer[2], divisor)
}
function isInsideYoutubeVideo(event) {
var elem = event.target,
isControl = !1;
if (-1 != document.URL.indexOf("www.youtube.com/watch"))
do
if (isControl = elem.classList && elem.classList.contains("html5-video-controls")) break;
while (elem = elem.parentNode);
return isControl
}
function pulse_(x) {
var val, start, expx;
return x *= options.pulseScale, 1 > x ? val = x - (1 - Math.exp(-x)) : (start = Math.exp(-1), x -= 1, expx = 1 - Math.exp(-x), val = start + expx * (1 - start)), val * options.pulseNormalize
}
function pulse(x) {
return x >= 1 ? 1 : 0 >= x ? 0 : (1 == options.pulseNormalize && (options.pulseNormalize /= pulse_(1)), pulse_(x))
}
function SmoothScroll(optionsToSet) {
for (var key in optionsToSet) defaultOptions.hasOwnProperty(key) && (options[key] = optionsToSet[key])
}
var activeElement, observer, refreshSize, clearCacheTimer, deltaBufferTimer, defaultOptions = {
frameRate: 70,
animationTime: 500,
stepSize: 55,
pulseAlgorithm: !0,
pulseScale: 4,
pulseNormalize: 1,
accelerationDelta: 50,
accelerationMax: 3,
keyboardSupport: !0,
arrowScroll: 50,
touchpadSupport: !0,
fixedBackground: !0,
excluded: ""
},
options = defaultOptions,
isExcluded = !1,
isFrame = !1,
direction = {
x: 0,
y: 0
},
initDone = !1,
root = document.documentElement,
deltaBuffer = [],
isMac = /^Mac/.test(navigator.platform),
key = {
left: 37,
up: 38,
right: 39,
down: 40,
spacebar: 32,
pageup: 33,
pagedown: 34,
end: 35,
home: 36
},
que = [],
pending = !1,
lastScroll = Date.now(),
uniqueID = function() {
var i = 0;
return function(el) {
return el.uniqueID || (el.uniqueID = i++)
}
}(),
cache = {};
window.localStorage && localStorage.SS_deltaBuffer && (deltaBuffer = localStorage.SS_deltaBuffer.split(","));
var wheelEvent, requestFrame = function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback, element, delay) {
window.setTimeout(callback, delay || 1e3 / 60)
}
}(),
MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
getScrollRoot = function() {
var SCROLL_ROOT;
return function() {
if (!SCROLL_ROOT) {
var dummy = document.createElement("div");
dummy.style.cssText = "height:10000px;width:1px;", document.body.appendChild(dummy);
var bodyScrollTop = document.body.scrollTop;
document.documentElement.scrollTop;
window.scrollBy(0, 3), SCROLL_ROOT = document.body.scrollTop != bodyScrollTop ? document.body : document.documentElement, window.scrollBy(0, -3), document.body.removeChild(dummy)
}
return SCROLL_ROOT
}
}(),
userAgent = window.navigator.userAgent,
isIE = /Trident/.test(userAgent),
isEdge = /Edge/.test(userAgent),
isIE = /Trident/.test(userAgent),
isChrome = /chrome/i.test(userAgent) && !isEdge,
isMobile = (/safari/i.test(userAgent) && !isEdge, /mobile/i.test(userAgent)),
isIEWin7 = /Windows NT 6.1/i.test(userAgent) && /rv:11/i.test(userAgent),
isEnabledForBrowser = (isChrome || isIEWin7 || isIE || isEdge) && !isMobile;
"onwheel" in document.createElement("div") ? wheelEvent = "wheel" : "onmousewheel" in document.createElement("div") && (wheelEvent = "mousewheel"), wheelEvent && isEnabledForBrowser && (addEvent(wheelEvent, wheel), addEvent("mousedown", mousedown), addEvent("load", init)), SmoothScroll.destroy = cleanup, window.SmoothScrollOptions && SmoothScroll(window.SmoothScrollOptions), "function" == typeof define && define.amd ? define(function() {
return SmoothScroll
}) : "object" == typeof exports ? module.exports = SmoothScroll : window.SmoothScroll = SmoothScroll
}();