/*! * HC-Sticky * ========= * Version: 2.1.0 * Author: Some Web Media * Author URL: http://somewebmedia.com * Plugin URL: https://github.com/somewebmedia/hc-sticky * Description: Cross-browser plugin that makes any element on your page visible while you scroll * License: MIT */ ! function(t, e) { "use strict"; if ("object" == typeof module && "object" == typeof module.exports) { if (!t.document) throw new Error("HC-Sticky requires a browser to run."); module.exports = e(t) } else "function" == typeof define && define.amd ? define("hcSticky", [], e(t)) : e(t) }("undefined" != typeof window ? window : this, function(t) { "use strict"; var e = { top: 0, bottom: 0, bottomEnd: 0, innerTop: 0, innerSticker: null, stickyClass: "sticky", stickTo: null, followScroll: !0, queries: null, queryFlow: "down", onStart: null, onStop: null, onBeforeResize: null, onResize: null, resizeDebounce: 100, disable: !1 }, o = t.document, i = function(n, s) { if ("string" == typeof n && (n = o.querySelector(n)), !n) return !1; var r = {}, l = i.Helpers, a = n.parentNode; "static" === l.getStyle(a, "position") && (a.style.position = "relative"); var c = function() { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; l.isEmptyObject(t) && r || (r = Object.assign({}, e, r, t)) }, f = function() { return r.disable }, d = function() { if (r.queries) { var o = t.innerWidth, i = r.queryFlow, n = r.queries; if (function(t) { r = Object.assign({}, e, t || {}) }(s), "up" === i) for (var a in n) o >= a && !l.isEmptyObject(n[a]) && c(n[a]); else { var f = []; for (var d in r.queries) { var u = {}; u[d] = n[d], f.push(u) } for (var p = f.length - 1; p >= 0; p--) { var g = f[p], m = Object.keys(g)[0]; o <= m && !l.isEmptyObject(g[m]) && c(g[m]) } } } }, u = { css: {}, position: null, stick: function() { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; l.hasClass(n, r.stickyClass) || (!1 === p.isAttached && p.attach(), u.position = "fixed", n.style.position = "fixed", n.style.left = p.offsetLeft + "px", n.style .width = p.width, void 0 === t.bottom ? n.style.bottom = "auto" : n.style .bottom = t.bottom + "px", void 0 === t.top ? n.style.top = "auto" : n.style .top = t.top + "px", n.classList ? n.classList.add(r.stickyClass) : n .className += " " + r.stickyClass, r.onStart && r.onStart.call(n, r)) }, reset: function() { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; if (t.disable = t.disable || !1, "fixed" === u.position || null === u.position || !( void 0 === t.top && void 0 === t.bottom || void 0 !== t.top && (parseInt(l .getStyle(n, "top")) || 0) === t.top || void 0 !== t.bottom && (parseInt(l .getStyle(n, "bottom")) || 0) === t.bottom)) { !0 === t.disable ? !0 === p.isAttached && p.detach() : !1 === p.isAttached && p .attach(); var e = t.position || u.css.position; u.position = e, n.style.position = e, n.style.left = !0 === t.disable ? u.css.left : p.positionLeft + "px", n.style.width = "absolute" !== e ? u.css.width : p.width, void 0 === t.bottom ? n.style.bottom = !0 === t.disable ? "" : "auto" : n.style .bottom = t.bottom + "px", void 0 === t.top ? n.style.top = !0 === t.disable ? "" : "auto" : n.style.top = t.top + "px", n.classList ? n.classList.remove(r .stickyClass) : n.className = n.className.replace(new RegExp("(^|\\b)" + r .stickyClass.split(" ").join("|") + "(\\b|$)", "gi"), " "), r.onStop && r .onStop.call(n, r) } } }, p = { el: o.createElement("div"), offsetLeft: null, positionLeft: null, width: null, isAttached: !1, init: function() { for (var t in u.css) p.el.style[t] = u.css[t]; var e = l.getStyle(n); p.offsetLeft = l.offset(n).left - (parseInt(e.marginLeft) || 0), p.positionLeft = l .position(n).left, p.width = l.getStyle(n, "width") }, attach: function() { a.insertBefore(p.el, n.nextSibling), p.isAttached = !0 }, detach: function() { p.el = a.removeChild(p.el), p.isAttached = !1 } }, g = void 0, m = void 0, v = void 0, h = void 0, y = void 0, b = void 0, S = void 0, w = void 0, k = void 0, x = void 0, L = void 0, E = void 0, T = void 0, C = void 0, j = void 0, z = void 0, N = void 0, O = void 0, R = function() { u.css = function(t) { var e = l.getCascadedStyle(t), o = l.getStyle(t), i = { height: t.offsetHeight + "px", left: e.left, right: e.right, top: e.top, bottom: e.bottom, position: o.position, display: o.display, verticalAlign: o.verticalAlign, boxSizing: o.boxSizing, marginLeft: e.marginLeft, marginRight: e.marginRight, marginTop: e.marginTop, marginBottom: e.marginBottom, paddingLeft: e.paddingLeft, paddingRight: e.paddingRight }; return e.float && (i.float = e.float || "none"), e.cssFloat && (i.cssFloat = e .cssFloat || "none"), o.MozBoxSizing && (i.MozBoxSizing = o.MozBoxSizing), i .width = "auto" !== e.width ? e.width : "border-box" === i.boxSizing || "border-box" === i.MozBoxSizing ? t.offsetWidth + "px" : o.width, i }(n), p.init(), g = !(!r.stickTo || !("document" === r.stickTo || r.stickTo.nodeType && 9 === r.stickTo.nodeType || "object" == typeof r.stickTo && r.stickTo instanceof( "undefined" != typeof HTMLDocument ? HTMLDocument : Document))), m = r.stickTo ? g ? o : "string" == typeof r.stickTo ? o.querySelector(r.stickTo) : r.stickTo : a, j = (O = function() { var t = n.offsetHeight + (parseInt(u.css.marginTop) || 0) + (parseInt(u.css .marginBottom) || 0), e = (j || 0) - t; return e >= -1 && e <= 1 ? j : t })(), h = (N = function() { return g ? Math.max(o.documentElement.clientHeight, o.body.scrollHeight, o .documentElement.scrollHeight, o.body.offsetHeight, o.documentElement .offsetHeight) : m.offsetHeight })(), y = g ? 0 : l.offset(m).top, b = r.stickTo ? g ? 0 : l.offset(a).top : y, S = t .innerHeight, z = n.offsetTop - (parseInt(u.css.marginTop) || 0), v = r.innerSticker ? "string" == typeof r.innerSticker ? o.querySelector(r.innerSticker) : r.innerSticker : null, w = isNaN(r.top) && r.top.indexOf("%") > -1 ? parseFloat(r.top) / 100 * S : r.top, k = isNaN(r.bottom) && r.bottom.indexOf("%") > -1 ? parseFloat(r.bottom) / 100 * S : r.bottom, x = v ? v.offsetTop : r.innerTop ? r.innerTop : 0, L = isNaN(r.bottomEnd) && r.bottomEnd .indexOf("%") > -1 ? parseFloat(r.bottomEnd) / 100 * S : r.bottomEnd, E = y - w + x + z }, H = t.pageYOffset || o.documentElement.scrollTop, B = 0, I = void 0, q = function() { j = O(), h = N(), T = y + h - w - L, C = j > S; var e = t.pageYOffset || o.documentElement.scrollTop, i = l.offset(n).top, s = i - e, c = void 0; I = e < H ? "up" : "down", B = e - H, H = e, e > E ? T + w + (C ? k : 0) - (r.followScroll && C ? 0 : w) <= e + j - x - (j - x > S - (E - x) && r.followScroll && (c = j - S - x) > 0 ? c : 0) ? u.reset({ position: "absolute", bottom: b + a.offsetHeight - T - w }) : C && r.followScroll ? "down" === I ? s + j + k <= S ? u.stick({ bottom: k }) : "fixed" === u.position && u.reset({ position: "absolute", top: i - w - E - B + x }) : s + x < 0 && "fixed" === u.position ? u.reset({ position: "absolute", top: i - w - E + x - B }) : i >= e + w - x && u.stick({ top: w - x }) : u.stick({ top: w - x }) : u.reset({ disable: !0 }) }, A = !1, F = !1, M = function() { A && (l.event.unbind(t, "scroll", q), A = !1) }, D = function() { R(), j >= h ? M() : (q(), A || (l.event.bind(t, "scroll", q), A = !0)) }, W = function() { n.style.position = "", n.style.left = "", n.style.top = "", n.style.bottom = "", n.style.width = "", n.classList ? n.classList.remove(r.stickyClass) : n.className = n.className.replace( new RegExp("(^|\\b)" + r.stickyClass.split(" ").join("|") + "(\\b|$)", "gi"), " "), u .css = {}, u.position = null, !0 === p.isAttached && p.detach() }, P = function() { W(), d(), f() ? M() : D() }, V = function() { r.onBeforeResize && r.onBeforeResize.call(n, r), P(), r.onResize && r.onResize.call(n, r) }, Y = r.resizeDebounce ? l.debounce(V, r.resizeDebounce) : V, $ = function() { F && (l.event.unbind(t, "resize", Y), F = !1), M() }, Q = function() { F || (l.event.bind(t, "resize", Y), F = !0), d(), f() ? M() : D() }; this.options = function(t) { return t ? r.option || null : Object.assign({}, r) }, this.reinit = P, this.update = function(t) { c(t), P() }, this.attach = Q, this.detach = $, this.destroy = function() { $(), W() }, c(s), Q(), l.event.bind(t, "load", P) }; if (void 0 !== t.jQuery) { var n = t.jQuery; n.fn.extend({ hcSticky: function(t) { return this.length ? this.each(function() { var e = n.data(this, "hcSticky"); e ? e.update(t) : (e = new i(this, t), n.data(this, "hcSticky", e)) }) : this } }) } return t.hcSticky = t.hcSticky || i, i }), function(t) { "use strict"; var e = t.hcSticky, o = t.document; "function" != typeof Object.assign && Object.defineProperty(Object, "assign", { value: function(t, e) { if (null == t) throw new TypeError("Cannot convert undefined or null to object"); for (var o = Object(t), i = 1; i < arguments.length; i++) { var n = arguments[i]; if (null != n) for (var s in n) Object.prototype.hasOwnProperty.call(n, s) && (o[s] = n[s]) } return o }, writable: !0, configurable: !0 }); var i = function() { function e(e) { var o = t.event; return o.target = o.target || o.srcElement || e, o } var i = o.documentElement, n = function() {}; i.addEventListener ? n = function(t, e, o) { t.addEventListener(e, o, !1) } : i.attachEvent && (n = function(t, o, i) { t[o + i] = i.handleEvent ? function() { var o = e(t); i.handleEvent.call(i, o) } : function() { var o = e(t); i.call(t, o) }, t.attachEvent("on" + o, t[o + i]) }); var s = function() {}; return i.removeEventListener ? s = function(t, e, o) { t.removeEventListener(e, o, !1) } : i.detachEvent && (s = function(t, e, o) { t.detachEvent("on" + e, t[e + o]); try { delete t[e + o] } catch (i) { t[e + o] = void 0 } }), { bind: n, unbind: s } }(), n = function(e, i) { return t.getComputedStyle ? i ? o.defaultView.getComputedStyle(e, null).getPropertyValue(i) : o.defaultView .getComputedStyle(e, null) : e.currentStyle ? i ? e.currentStyle[i.replace(/-\w/g, function(t) { return t.toUpperCase().replace("-", "") })] : e.currentStyle : void 0 }, s = function(e) { var i = e.getBoundingClientRect(), n = t.pageYOffset || o.documentElement.scrollTop, s = t.pageXOffset || o.documentElement.scrollLeft; return { top: i.top + n, left: i.left + s } }; e.Helpers = { isEmptyObject: function(t) { for (var e in t) return !1; return !0 }, debounce: function(t, e, o) { var i = void 0; return function() { var n = this, s = arguments, r = o && !i; clearTimeout(i), i = setTimeout(function() { i = null, o || t.apply(n, s) }, e), r && t.apply(n, s) } }, hasClass: function(t, e) { return t.classList ? t.classList.contains(e) : new RegExp("(^| )" + e + "( |$)", "gi").test(t .className) }, offset: s, position: function(t) { var e = t.offsetParent, o = s(e), i = s(t), r = n(e), l = n(t); return o.top += parseInt(r.borderTopWidth) || 0, o.left += parseInt(r.borderLeftWidth) || 0, { top: i.top - o.top - (parseInt(l.marginTop) || 0), left: i.left - o.left - (parseInt(l.marginLeft) || 0) } }, getStyle: n, getCascadedStyle: function(e) { var i = e.cloneNode(!0); i.style.display = "none", e.parentNode.insertBefore(i, e.nextSibling); var n = void 0; i.currentStyle ? n = i.currentStyle : t.getComputedStyle && (n = o.defaultView.getComputedStyle(i, null)); var s = {}; for (var r in n) !isNaN(r) || "string" != typeof n[r] && "number" != typeof n[r] || (s[r] = n[r]); if (Object.keys(s).length < 3) { s = {}; for (var l in n) isNaN(l) || (s[n[l].replace(/-\w/g, function(t) { return t.toUpperCase().replace("-", "") })] = n.getPropertyValue(n[l])) } if (s.margin || "auto" !== s.marginLeft ? s.margin || s.marginLeft !== s.marginRight || s .marginLeft !== s.marginTop || s.marginLeft !== s.marginBottom || (s.margin = s.marginLeft) : s .margin = "auto", !s.margin && "0px" === s.marginLeft && "0px" === s.marginRight) { var a = e.offsetLeft - e.parentNode.offsetLeft, c = a - (parseInt(s.left) || 0) - (parseInt(s.right) || 0), f = e.parentNode.offsetWidth - e.offsetWidth - a - (parseInt(s.right) || 0) + (parseInt(s .left) || 0) - c; 0 !== f && 1 !== f || (s.margin = "auto") } return i.parentNode.removeChild(i), i = null, s }, event: i } }(window);