/*! * better-normal-scroll v1.15.2 * (c) 2016-2019 ustbhuangyi * Released under the MIT License. */ !function (t, i) { "object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : t.BScroll = i() }(this, function () { "use strict"; function o(t, i) { for (; i + 1 < t.length; i++) t[i] = t[i + 1]; t.pop() } var l = function (t, i) { if (Array.isArray(t)) return t; if (Symbol.iterator in Object(t)) return function (t, i) { var e = [], s = !0, o = !1, n = void 0; try { for (var r, h = t[Symbol.iterator](); !(s = (r = h.next()).done) && (e.push(r.value), !i || e.length !== i); s = !0) ; } catch (t) { o = !0, n = t } finally { try { !s && h.return && h.return() } finally { if (o) throw n } } return e }(t, i); throw new TypeError("Invalid attempt to destructure non-iterable instance") }; var e = "undefined" != typeof window, t = e && navigator.userAgent.toLowerCase(), i = t && /wechatdevtools/.test(t), s = t && 0 < t.indexOf("android"); function w() { return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date } function a(t) { for (var i = arguments.length, e = Array(1 < i ? i - 1 : 0), s = 1; s < i; s++) e[s - 1] = arguments[s]; for (var o = 0; o < e.length; o++) { var n = e[o]; for (var r in n) t[r] = n[r] } return t } function c(t) { return null == t } function d(t, i) { return Math.sqrt(t * t + i * i) } var n = e && document.createElement("div").style, r = function () { if (!e) return !1; var t = { standard: "transform", webkit: "webkitTransform", Moz: "MozTransform", O: "OTransform", ms: "msTransform" }; for (var i in t) if (void 0 !== n[t[i]]) return i; return !1 }(); function h(t) { return !1 !== r && ("standard" === r ? "transitionEnd" === t ? "transitionend" : t : r + t.charAt(0).toUpperCase() + t.substr(1)) } function p(t, i, e, s) { t.addEventListener(i, e, {passive: !1, capture: !!s}) } function u(t, i, e, s) { t.removeEventListener(i, e, {passive: !1, capture: !!s}) } function m(t) { for (var i = 0, e = 0; t;) i -= t.offsetLeft, e -= t.offsetTop, t = t.offsetParent; return {left: i, top: e} } function f(t) { var i = t.getBoundingClientRect(); return {left: -(i.left + window.pageXOffset), top: -(i.top + window.pageYOffset)} } var g = r && "standard" !== r ? "-" + r.toLowerCase() + "-" : "", v = h("transform"), y = h("transition"), x = e && h("perspective") in n, T = e && ("ontouchstart" in window || i), S = !1 !== v, b = e && y in n, _ = { transform: v, transition: y, transitionTimingFunction: h("transitionTimingFunction"), transitionDuration: h("transitionDuration"), transitionDelay: h("transitionDelay"), transformOrigin: h("transformOrigin"), transitionEnd: h("transitionEnd") }, Y = {touchstart: 1, touchmove: 1, touchend: 1, mousedown: 2, mousemove: 2, mouseup: 2}; function X(t) { if (t instanceof window.SVGElement) { var i = t.getBoundingClientRect(); return {top: i.top, left: i.left, width: i.width, height: i.height} } return {top: t.offsetTop, left: t.offsetLeft, width: t.offsetWidth, height: t.offsetHeight} } function M(t, i) { for (var e in i) if (i[e].test(t[e])) return !0; return !1 } function P(t) { var i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : "click", e = void 0; "mouseup" === t.type || "mousecancel" === t.type ? e = t : "touchend" !== t.type && "touchcancel" !== t.type || (e = t.changedTouches[0]); var s = {}; e && (s.screenX = e.screenX || 0, s.screenY = e.screenY || 0, s.clientX = e.clientX || 0, s.clientY = e.clientY || 0); var o = void 0, n = !0, r = !0; if ("undefined" != typeof MouseEvent) try { o = new MouseEvent(i, a({bubbles: n, cancelable: r}, s)) } catch (t) { h() } else h(); function h() { (o = document.createEvent("Event")).initEvent(i, n, r), a(o, s) } o.forwardedTouchEvent = !0, o._constructed = !0, t.target.dispatchEvent(o) } function D(t, i) { t.removeChild(i) } var E = { startX: 0, startY: 0, scrollX: !1, scrollY: !0, freeScroll: !1, directionLockThreshold: 5, eventPassthrough: "", click: !1, tap: !1, bounce: !0, bounceTime: 800, momentum: !0, momentumLimitTime: 300, momentumLimitDistance: 15, swipeTime: 2500, swipeBounceTime: 500, deceleration: .0015, flickLimitTime: 200, flickLimitDistance: 100, resizePolling: 60, probeType: 0, preventDefault: !0, preventDefaultException: {tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/}, HWCompositing: !0, useTransition: !0, useTransform: !0, bindToWrapper: !1, disableMouse: T, disableTouch: !T, observeDOM: !0, autoBlur: !0, wheel: !1, snap: !1, scrollbar: !1, pullDownRefresh: !1, pullUpLoad: !1, mouseWheel: !1, stopPropagation: !1, zoom: !1, infinity: !1, dblclick: !1 }; var I = { swipe: { style: "cubic-bezier(0.23, 1, 0.32, 1)", fn: function (t) { return 1 + --t * t * t * t * t } }, swipeBounce: { style: "cubic-bezier(0.25, 0.46, 0.45, 0.94)", fn: function (t) { return t * (2 - t) } }, bounce: { style: "cubic-bezier(0.165, 0.84, 0.44, 1)", fn: function (t) { return 1 - --t * t * t * t } } }; function W(t, i, e, s, o, n, r, h) { var a = t - i, l = Math.abs(a) / e, c = r.deceleration, p = r.itemHeight, d = r.swipeBounceTime, u = r.wheel, m = r.swipeTime, f = u ? 4 : 15, g = t + l / c * (a < 0 ? -1 : 1); return u && p && (g = h._findNearestValidWheel(g).y), g < s ? (g = n ? Math.max(s - n / 4, s - n / f * l) : s, m = d) : o < g && (g = n ? Math.min(o + n / 4, o + n / f * l) : o, m = d), { destination: Math.round(g), duration: m } } function k() { } var z = e ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || function (t) { return window.setTimeout(t, (t.interval || 100 / 60) / 2) } : k, H = e ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (t) { window.clearTimeout(t) } : k; function A(t) { console.error("[BScroll warn]: " + t) } function C(t, i) { if (!t) throw new Error("[BScroll] " + i) } function O(t) { var i = document.createElement("div"), e = document.createElement("div"); return i.style.cssText = "position:absolute;z-index:9999;pointerEvents:none", e.style.cssText = "box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;", e.className = "bscroll-indicator", i.className = "horizontal" === t ? (i.style.cssText += ";height:7px;left:2px;right:2px;bottom:0", e.style.height = "100%", "bscroll-horizontal-scrollbar") : (i.style.cssText += ";width:7px;bottom:2px;top:2px;right:1px", e.style.width = "100%", "bscroll-vertical-scrollbar"), i.style.cssText += ";overflow:hidden", i.appendChild(e), i } function L(t, i) { this.wrapper = i.el, this.wrapperStyle = this.wrapper.style, this.indicator = this.wrapper.children[0], this.indicatorStyle = this.indicator.style, this.scroller = t, this.direction = i.direction, i.fade ? (this.visible = 0, this.wrapperStyle.opacity = "0") : this.visible = 1, this.sizeRatioX = 1, this.sizeRatioY = 1, this.maxPosX = 0, this.maxPosY = 0, this.x = 0, this.y = 0, i.interactive && this._addDOMEvents() } L.prototype.handleEvent = function (t) { switch (t.type) { case"touchstart": case"mousedown": this._start(t); break; case"touchmove": case"mousemove": this._move(t); break; case"touchend": case"mouseup": case"touchcancel": case"mousecancel": this._end(t) } }, L.prototype.refresh = function () { this._shouldShow() && (this.transitionTime(), this._calculate(), this.updatePosition()) }, L.prototype.fade = function (t, i) { var e = this; if (!i || this.visible) { var s = t ? 250 : 500; t = t ? "1" : "0", this.wrapperStyle[_.transitionDuration] = s + "ms", clearTimeout(this.fadeTimeout), this.fadeTimeout = setTimeout(function () { e.wrapperStyle.opacity = t, e.visible = +t }, 0) } }, L.prototype.updatePosition = function () { if ("vertical" === this.direction) { var t = Math.round(this.sizeRatioY * this.scroller.y); if (t < 0) { this.transitionTime(500); var i = Math.max(this.indicatorHeight + 3 * t, 8); this.indicatorStyle.height = i + "px", t = 0 } else if (t > this.maxPosY) { this.transitionTime(500); var e = Math.max(this.indicatorHeight - 3 * (t - this.maxPosY), 8); this.indicatorStyle.height = e + "px", t = this.maxPosY + this.indicatorHeight - e } else this.indicatorStyle.height = this.indicatorHeight + "px"; this.y = t, this.scroller.options.useTransform ? this.indicatorStyle[_.transform] = "translateY(" + t + "px)" + this.scroller.translateZ : this.indicatorStyle.top = t + "px" } else { var s = Math.round(this.sizeRatioX * this.scroller.x); if (s < 0) { this.transitionTime(500); var o = Math.max(this.indicatorWidth + 3 * s, 8); this.indicatorStyle.width = o + "px", s = 0 } else if (s > this.maxPosX) { this.transitionTime(500); var n = Math.max(this.indicatorWidth - 3 * (s - this.maxPosX), 8); this.indicatorStyle.width = n + "px", s = this.maxPosX + this.indicatorWidth - n } else this.indicatorStyle.width = this.indicatorWidth + "px"; this.x = s, this.scroller.options.useTransform ? this.indicatorStyle[_.transform] = "translateX(" + s + "px)" + this.scroller.translateZ : this.indicatorStyle.left = s + "px" } }, L.prototype.transitionTime = function () { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0; this.indicatorStyle[_.transitionDuration] = t + "ms" }, L.prototype.transitionTimingFunction = function (t) { this.indicatorStyle[_.transitionTimingFunction] = t }, L.prototype.destroy = function () { this._removeDOMEvents(), this.wrapper.parentNode.removeChild(this.wrapper) }, L.prototype._start = function (t) { var i = t.touches ? t.touches[0] : t; t.preventDefault(), t.stopPropagation(), this.transitionTime(), this.initiated = !0, this.moved = !1, this.lastPointX = i.pageX, this.lastPointY = i.pageY, this.startTime = w(), this._handleMoveEvents(p), this.scroller.trigger("beforeScrollStart") }, L.prototype._move = function (t) { var i = t.touches ? t.touches[0] : t; t.preventDefault(), t.stopPropagation(), this.moved || this.scroller.trigger("scrollStart"), this.moved = !0; var e = i.pageX - this.lastPointX; this.lastPointX = i.pageX; var s = i.pageY - this.lastPointY; this.lastPointY = i.pageY; var o = this.x + e, n = this.y + s; this._pos(o, n) }, L.prototype._end = function (t) { if (this.initiated) { this.initiated = !1, t.preventDefault(), t.stopPropagation(), this._handleMoveEvents(u); var i = this.scroller.options.snap; if (i) { var e = i.speed, s = i.easing, o = void 0 === s ? I.bounce : s, n = this.scroller._nearestSnap(this.scroller.x, this.scroller.y), r = e || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - n.x), 1e3), Math.min(Math.abs(this.scroller.y - n.y), 1e3)), 300); this.scroller.x === n.x && this.scroller.y === n.y || (this.scroller.directionX = 0, this.scroller.directionY = 0, this.scroller.currentPage = n, this.scroller.scrollTo(n.x, n.y, r, o)) } this.moved && this.scroller.trigger("scrollEnd", {x: this.scroller.x, y: this.scroller.y}) } }, L.prototype._pos = function (t, i) { t < 0 ? t = 0 : t > this.maxPosX && (t = this.maxPosX), i < 0 ? i = 0 : i > this.maxPosY && (i = this.maxPosY), t = Math.round(t / this.sizeRatioX), i = Math.round(i / this.sizeRatioY), this.scroller.scrollTo(t, i), this.scroller.trigger("scroll", { x: this.scroller.x, y: this.scroller.y }) }, L.prototype._shouldShow = function () { return "vertical" === this.direction && this.scroller.hasVerticalScroll || "horizontal" === this.direction && this.scroller.hasHorizontalScroll ? !(this.wrapper.style.display = "") : !(this.wrapper.style.display = "none") }, L.prototype._calculate = function () { if ("vertical" === this.direction) { var t = this.wrapper.clientHeight; this.indicatorHeight = Math.max(Math.round(t * t / (this.scroller.scrollerHeight || t || 1)), 8), this.indicatorStyle.height = this.indicatorHeight + "px", this.maxPosY = t - this.indicatorHeight, this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY } else { var i = this.wrapper.clientWidth; this.indicatorWidth = Math.max(Math.round(i * i / (this.scroller.scrollerWidth || i || 1)), 8), this.indicatorStyle.width = this.indicatorWidth + "px", this.maxPosX = i - this.indicatorWidth, this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX } }, L.prototype._addDOMEvents = function () { var t = p; this._handleDOMEvents(t) }, L.prototype._removeDOMEvents = function () { var t = u; this._handleDOMEvents(t), this._handleMoveEvents(t) }, L.prototype._handleMoveEvents = function (t) { this.scroller.options.disableTouch || t(window, "touchmove", this), this.scroller.options.disableMouse || t(window, "mousemove", this) }, L.prototype._handleDOMEvents = function (t) { this.scroller.options.disableTouch || (t(this.indicator, "touchstart", this), t(window, "touchend", this)), this.scroller.options.disableMouse || (t(this.indicator, "mousedown", this), t(window, "mouseup", this)) }; var N, R, F, U, V, B, q, Z, j, G; function $(t) { if (t && t.classList) return t.classList.contains("tombstone") } function J(t, i) { var e = this; this.options = i, C("function" == typeof this.options.createTombstone, "Infinite scroll need createTombstone Function to create tombstone"), C("function" == typeof this.options.fetch, "Infinite scroll need fetch Function to fetch new data."), C("function" == typeof this.options.render, "Infinite scroll need render Function to render each item."), this.firstAttachedItem = 0, this.lastAttachedItem = 0, this.anchorScrollTop = 0, this.anchorItem = { index: 0, offset: 0 }, this.tombstoneHeight = 0, this.tombstoneWidth = 0, this.tombstones = [], this.tombstonesAnimationHandlers = [], this.items = [], this.loadedItems = 0, this.requestInProgress = !1, this.hasMore = !0, this.scroller = t, this.wrapperEl = this.scroller.wrapper, this.scrollerEl = this.scroller.scroller, this.scroller.on("resize", function () { e.onResize() }), this.scroller.on("destroy", function () { e.destroy() }), this._onResizeHandler = setTimeout(function () { e.onResize(), e.scroller.on("scroll", function () { e.onScroll() }) }) } function K(t, i) { this.wrapper = "string" == typeof t ? document.querySelector(t) : t, this.wrapper || A("Can not resolve the wrapper DOM."), this.scroller = this.wrapper.children[0], this.scroller || A("The wrapper need at least one child element to be scroller."), this.scrollerStyle = this.scroller.style, this._init(i) } return J.prototype.destroy = function () { var i = this; clearTimeout(this._onResizeHandler), this.tombstonesAnimationHandlers.forEach(function (t) { clearTimeout(t) }), this.tombstonesAnimationHandlers = null, this.items.forEach(function (t) { t.node && (i.scrollerEl.removeChild(t.node), t.node = null) }), this.scroller.infiniteScroller = null, this.scroller = null, this.wrapperEl = null, this.scrollerEl = null, this.items = null, this.tombstones = null }, J.prototype.onScroll = function () { var t = -this.scroller.y, i = t - this.anchorScrollTop; this.anchorItem = 0 === t ? { index: 0, offset: 0 } : this._calculateAnchoredItem(this.anchorItem, i), this.anchorScrollTop = t; var e = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight), s = this.anchorItem.index, o = e.index; i < 0 ? (s -= 30, o += 10) : (s -= 10, o += 30), this.fill(s, o), this.maybeRequestContent() }, J.prototype.onResize = function () { var t = this.options.createTombstone(); t.style.position = "absolute", this.scrollerEl.appendChild(t), t.style.display = "", this.tombstoneHeight = t.offsetHeight, this.tombstoneWidth = t.offsetWidth, this.scrollerEl.removeChild(t); for (var i = 0; i < this.items.length; i++) this.items[i].height = this.items[i].width = 0; this.onScroll() }, J.prototype.fill = function (t, i) { this.firstAttachedItem = Math.max(0, t), this.hasMore || (i = Math.min(i, this.items.length)), this.lastAttachedItem = i, this.attachContent() }, J.prototype.maybeRequestContent = function () { var s = this; if (!this.requestInProgress && this.hasMore) { var t = this.lastAttachedItem - this.loadedItems; t <= 0 || (this.requestInProgress = !0, this.options.fetch(t).then(function (t) { if (s.requestInProgress = !1, t) s.addContent(t); else { s.hasMore = !1; var i = s._removeTombstones(), e = 0; s.anchorItem.index <= s.items.length ? (e = s._fixScrollPosition(), s._setupAnimations({}, e), s.scroller.resetPosition(s.scroller.options.bounceTime)) : (s.anchorItem.index -= i, e = s._fixScrollPosition(), s._setupAnimations({}, e), s.scroller.stop(), s.scroller.resetPosition(), s.onScroll()) } })) } }, J.prototype.addContent = function (t) { for (var i = 0; i < t.length; i++) this.items.length <= this.loadedItems && this._addItem(), this.items[this.loadedItems++].data = t[i]; this.attachContent(), this.maybeRequestContent() }, J.prototype.attachContent = function () { var t = this._collectUnusedNodes(), i = this._createDOMNodes(t); this._cleanupUnusedNodes(t), this._cacheNodeSize(); var e = this._fixScrollPosition(); this._setupAnimations(i, e) }, J.prototype.resetMore = function () { this.hasMore = !0 }, J.prototype._removeTombstones = function () { for (var t, i = void 0, e = this.items.length, s = 0; s < e; s++) { var o = this.items[s].node, n = this.items[s].data; o && !$(o) || n || (void 0 === i && (i = s), o && this.scrollerEl.removeChild(o)) } return t = e - i, this.items.splice(i), this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length), t }, J.prototype._collectUnusedNodes = function () { for (var t = [], i = 0; i < this.items.length; i++) if (i !== this.firstAttachedItem) { var e = this.items[i].node; e && ($(e) ? (this.tombstones.push(e), this.tombstones[this.tombstones.length - 1].style.display = "none") : t.push(e)), this.items[i].node = null } else i = this.lastAttachedItem - 1; return t }, J.prototype._createDOMNodes = function (t) { for (var i = {}, e = this.firstAttachedItem; e < this.lastAttachedItem; e++) { for (; this.items.length <= e;) this._addItem(); var s = this.items[e].node, o = this.items[e].data; if (s) { if (!$(s) || !o) continue; s.style.zIndex = 1, i[e] = [s, this.items[e].top - this.anchorScrollTop], this.items[e].node = null } var n = o ? this.options.render(o, t.pop()) : this._getTombStone(); n.style.position = "absolute", this.items[e].top = -1, this.scrollerEl.appendChild(n), this.items[e].node = n } return i }, J.prototype._cleanupUnusedNodes = function (t) { for (; t.length;) this.scrollerEl.removeChild(t.pop()) }, J.prototype._cacheNodeSize = function () { for (var t = this.firstAttachedItem; t < this.lastAttachedItem; t++) { var i = this.items[t]; if (i.data && !i.height) { var e = $(i.node); i.height = e ? this.tombstoneHeight : i.node.offsetHeight, i.width = e ? this.tombstoneWidth : i.node.offsetWidth } } }, J.prototype._fixScrollPosition = function () { for (var t = this.anchorScrollTop = 0; t < this.anchorItem.index; t++) this.anchorScrollTop += this.items[t].height || this.tombstoneHeight; this.anchorScrollTop += this.anchorItem.offset; for (var i = this.anchorScrollTop - this.anchorItem.offset, e = this.anchorItem.index; e > this.firstAttachedItem;) i -= this.items[e - 1].height || this.tombstoneHeight, e--; return i }, J.prototype._setupAnimations = function (e, t) { var s = this; for (var i in e) { var o = e[i]; this.items[i].node.style[_.transform] = "translateY(" + (this.anchorScrollTop + o[1]) + "px) scale(" + this.tombstoneWidth / this.items[i].width + ", " + this.tombstoneHeight / this.items[i].height + ")", this.items[i].node.offsetTop, o[0].offsetTop, this.items[i].node.style[_.transition] = g + "transform 200ms" } for (var n = this.firstAttachedItem; n < this.lastAttachedItem; n++) { var r = e[n]; if (r) { var h = r[0]; h.style[_.transition] = g + "transform 200ms, opacity 200ms", h.style[_.transform] = "translateY(" + t + "px) scale(" + this.items[n].width / this.tombstoneWidth + ", " + this.items[n].height / this.tombstoneHeight + ")", h.style.opacity = 0 } t !== this.items[n].top && (r || (this.items[n].node.style[_.transition] = ""), this.items[n].node.style[_.transform] = "translateY(" + t + "px)"), this.items[n].top = t, t += this.items[n].height || this.tombstoneHeight } this.scroller.maxScrollY = -(t - this.scroller.wrapperHeight + (this.hasMore ? 2e3 : 0)); var a = setTimeout(function () { for (var t in e) { var i = e[t]; i[0].style.display = "none", s.tombstones.push(i[0]) } }, 200); this.tombstonesAnimationHandlers.push(a) }, J.prototype._getTombStone = function () { var t = this.tombstones.pop(); return t ? (t.style.display = "", t.style.opacity = 1, t.style[_.transform] = "", t.style[_.transition] = "", t) : this.options.createTombstone() }, J.prototype._addItem = function () { this.items.push({data: null, node: null, height: 0, width: 0, top: 0}) }, J.prototype._calculateAnchoredItem = function (t, i) { if (0 === i) return t; var e = t.index, s = 0; if ((i += t.offset) < 0) { for (; i < 0 && 0 < e && this.items[e - 1].height;) i += this.items[e - 1].height, e--; s = Math.max(-e, Math.ceil(Math.min(i, 0) / this.tombstoneHeight)) } else { for (; 0 < i && e < this.items.length && this.items[e].height && this.items[e].height < i;) i -= this.items[e].height, e++; (e >= this.items.length || !this.items[e].height) && (s = Math.floor(Math.max(i, 0) / this.tombstoneHeight)) } return {index: e += s, offset: i -= s * this.tombstoneHeight} }, (N = K).prototype._init = function (t) { this._handleOptions(t), this._events = {}, this.x = 0, this.y = 0, this.directionX = 0, this.directionY = 0, this.setScale(1), this._addDOMEvents(), this._initExtFeatures(), this._watchTransition(), this.options.observeDOM && this._initDOMObserver(), this.options.autoBlur && this._handleAutoBlur(), this.refresh(), this.options.snap || this.scrollTo(this.options.startX, this.options.startY), this.enable() }, N.prototype.setScale = function (t) { this.lastScale = c(this.scale) ? t : this.scale, this.scale = t }, N.prototype._handleOptions = function (t) { this.options = a({}, E, t), this.translateZ = this.options.HWCompositing && x ? " translateZ(0)" : "", this.options.useTransition = this.options.useTransition && b, this.options.useTransform = this.options.useTransform && S, this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault, this.options.scrollX = "horizontal" !== this.options.eventPassthrough && this.options.scrollX, this.options.scrollY = "vertical" !== this.options.eventPassthrough && this.options.scrollY, this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough, this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold, !0 === this.options.tap && (this.options.tap = "tap") }, N.prototype._addDOMEvents = function () { var t = p; this._handleDOMEvents(t) }, N.prototype._removeDOMEvents = function () { var t = u; this._handleDOMEvents(t) }, N.prototype._handleDOMEvents = function (t) { var i = this.options.bindToWrapper ? this.wrapper : window; t(window, "orientationchange", this), t(window, "resize", this), this.options.click && t(this.wrapper, "click", this, !0), this.options.disableMouse || (t(this.wrapper, "mousedown", this), t(i, "mousemove", this), t(i, "mousecancel", this), t(i, "mouseup", this)), T && !this.options.disableTouch && (t(this.wrapper, "touchstart", this), t(i, "touchmove", this), t(i, "touchcancel", this), t(i, "touchend", this)), t(this.scroller, _.transitionEnd, this) }, N.prototype._initExtFeatures = function () { this.options.snap && this._initSnap(), this.options.scrollbar && this._initScrollbar(), this.options.pullUpLoad && this._initPullUp(), this.options.pullDownRefresh && this._initPullDown(), this.options.wheel && this._initWheel(), this.options.mouseWheel && this._initMouseWheel(), this.options.zoom && this._initZoom(), this.options.infinity && this._initInfinite() }, N.prototype._watchTransition = function () { if ("function" == typeof Object.defineProperty) { var o = this, n = !1, t = this.options.useTransition ? "isInTransition" : "isAnimating"; Object.defineProperty(this, t, { get: function () { return n }, set: function (t) { n = t; for (var i = o.scroller.children.length ? o.scroller.children : [o.scroller], e = n && !o.pulling ? "none" : "auto", s = 0; s < i.length; s++) i[s].style.pointerEvents = e } }) } }, N.prototype._handleAutoBlur = function () { this.on("scrollStart", function () { var t = document.activeElement; !t || "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName || t.blur() }) }, N.prototype._initDOMObserver = function () { var n = this; if ("undefined" != typeof MutationObserver) { var r = void 0, t = new MutationObserver(function (t) { if (!n._shouldNotRefresh()) { for (var i = !1, e = !1, s = 0; s < t.length; s++) { var o = t[s]; if ("attributes" !== o.type) { i = !0; break } if (o.target !== n.scroller) { e = !0; break } } i ? n.refresh() : e && (clearTimeout(r), r = setTimeout(function () { n._shouldNotRefresh() || n.refresh() }, 60)) } }); t.observe(this.scroller, {attributes: !0, childList: !0, subtree: !0}), this.on("destroy", function () { t.disconnect() }) } else this._checkDOMUpdate() }, N.prototype._shouldNotRefresh = function () { var t = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY; return this.isInTransition || this.stopFromTransition || t }, N.prototype._checkDOMUpdate = function () { var e = X(this.scroller), s = e.width, o = e.height; function n() { var t = this; setTimeout(function () { (function () { if (!this.destroyed) { var t = (e = X(this.scroller)).width, i = e.height; s === t && o === i || this.refresh(), s = t, o = i, n.call(this) } }).call(t) }, 1e3) } n.call(this) }, N.prototype.handleEvent = function (t) { switch (t.type) { case"touchstart": case"mousedown": this._start(t), this.options.zoom && t.touches && 1 < t.touches.length && this._zoomStart(t); break; case"touchmove": case"mousemove": this.options.zoom && t.touches && 1 < t.touches.length ? this._zoom(t) : this._move(t); break; case"touchend": case"mouseup": case"touchcancel": case"mousecancel": this.scaled ? this._zoomEnd(t) : this._end(t); break; case"orientationchange": case"resize": this._resize(); break; case"transitionend": case"webkitTransitionEnd": case"oTransitionEnd": case"MSTransitionEnd": this._transitionEnd(t); break; case"click": this.enabled && !t._constructed && (M(t.target, this.options.preventDefaultException) || (t.preventDefault(), t.stopPropagation())); break; case"wheel": case"DOMMouseScroll": case"mousewheel": this._onMouseWheel(t) } }, N.prototype.refresh = function () { var t = "static" === window.getComputedStyle(this.wrapper, null).position, i = X(this.wrapper); this.wrapperWidth = i.width, this.wrapperHeight = i.height; var e = X(this.scroller); this.scrollerWidth = Math.round(e.width * this.scale), this.scrollerHeight = Math.round(e.height * this.scale), this.relativeX = e.left, this.relativeY = e.top, t && (this.relativeX -= i.left, this.relativeY -= i.top), this.minScrollX = 0, this.minScrollY = 0; var s = this.options.wheel; s ? (this.items = this.scroller.children, this._checkWheelAllDisabled(), this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0, void 0 === this.selectedIndex && (this.selectedIndex = s.selectedIndex || 0), this.options.startY = -this.selectedIndex * this.itemHeight, this.maxScrollX = 0, this.maxScrollY = -this.itemHeight * (this.items.length - 1)) : (this.maxScrollX = this.wrapperWidth - this.scrollerWidth, this.options.infinity || (this.maxScrollY = this.wrapperHeight - this.scrollerHeight), this.maxScrollX < 0 ? (this.maxScrollX -= this.relativeX, this.minScrollX = -this.relativeX) : 1 < this.scale && (this.maxScrollX = this.maxScrollX / 2 - this.relativeX, this.minScrollX = this.maxScrollX), this.maxScrollY < 0 ? (this.maxScrollY -= this.relativeY, this.minScrollY = -this.relativeY) : 1 < this.scale && (this.maxScrollY = this.maxScrollY / 2 - this.relativeY, this.minScrollY = this.maxScrollY)), this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX, this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY, this.hasHorizontalScroll || (this.maxScrollX = this.minScrollX, this.scrollerWidth = this.wrapperWidth), this.hasVerticalScroll || (this.maxScrollY = this.minScrollY, this.scrollerHeight = this.wrapperHeight), this.endTime = 0, this.directionX = 0, this.directionY = 0, this.wrapperOffset = m(this.wrapper), this.trigger("refresh"), !this.scaled && this.resetPosition() }, N.prototype.enable = function () { this.enabled = !0 }, N.prototype.disable = function () { this.enabled = !1 }, (R = K).prototype._start = function (t) { var i = Y[t.type]; if ((1 === i || 0 === t.button) && !(!this.enabled || this.destroyed || this.initiated && this.initiated !== i)) { this.initiated = i, this.options.preventDefault && !M(t.target, this.options.preventDefaultException) && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.moved = !1, this.distX = 0, this.distY = 0, this.directionX = 0, this.directionY = 0, this.movingDirectionX = 0, this.movingDirectionY = 0, this.directionLocked = 0, this._transitionTime(), this.startTime = w(), this.options.wheel && (this.target = t.target), this.stop(); var e = t.touches ? t.touches[0] : t; this.startX = this.x, this.startY = this.y, this.absStartX = this.x, this.absStartY = this.y, this.pointX = e.pageX, this.pointY = e.pageY, this.trigger("beforeScrollStart") } }, R.prototype._move = function (t) { if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) { this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(); var i = t.touches ? t.touches[0] : t, e = i.pageX - this.pointX, s = i.pageY - this.pointY; this.pointX = i.pageX, this.pointY = i.pageY, this.distX += e, this.distY += s; var o = Math.abs(this.distX), n = Math.abs(this.distY), r = w(); if (!(r - this.endTime > this.options.momentumLimitTime && !this.moved && n < this.options.momentumLimitDistance && o < this.options.momentumLimitDistance)) { if (this.directionLocked || this.options.freeScroll || (o > n + this.options.directionLockThreshold ? this.directionLocked = "h" : n >= o + this.options.directionLockThreshold ? this.directionLocked = "v" : this.directionLocked = "n"), "h" === this.directionLocked) { if ("vertical" === this.options.eventPassthrough) t.preventDefault(); else if ("horizontal" === this.options.eventPassthrough) return void (this.initiated = !1); s = 0 } else if ("v" === this.directionLocked) { if ("horizontal" === this.options.eventPassthrough) t.preventDefault(); else if ("vertical" === this.options.eventPassthrough) return void (this.initiated = !1); e = 0 } e = this.hasHorizontalScroll ? e : 0, s = this.hasVerticalScroll ? s : 0, this.movingDirectionX = 0 < e ? -1 : e < 0 ? 1 : 0, this.movingDirectionY = 0 < s ? -1 : s < 0 ? 1 : 0; var h = this.x + e, a = this.y + s, l = !1, c = !1, p = !1, d = !1, u = this.options.bounce; !1 !== u && (l = void 0 === u.top || u.top, c = void 0 === u.bottom || u.bottom, p = void 0 === u.left || u.left, d = void 0 === u.right || u.right), (h > this.minScrollX || h < this.maxScrollX) && (h = h > this.minScrollX && p || h < this.maxScrollX && d ? this.x + e / 3 : h > this.minScrollX ? this.minScrollX : this.maxScrollX), (a > this.minScrollY || a < this.maxScrollY) && (a = a > this.minScrollY && l || a < this.maxScrollY && c ? this.y + s / 3 : a > this.minScrollY ? this.minScrollY : this.maxScrollY), this.moved || (this.moved = !0, this.trigger("scrollStart")), this._translate(h, a), r - this.startTime > this.options.momentumLimitTime && (this.startTime = r, this.startX = this.x, this.startY = this.y, 1 === this.options.probeType && this.trigger("scroll", { x: this.x, y: this.y })), 1 < this.options.probeType && this.trigger("scroll", {x: this.x, y: this.y}); var m = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft, f = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop, g = this.pointX - m, v = this.pointY - f; (g > document.documentElement.clientWidth - this.options.momentumLimitDistance || g < this.options.momentumLimitDistance || v < this.options.momentumLimitDistance || v > document.documentElement.clientHeight - this.options.momentumLimitDistance) && this._end(t) } } }, R.prototype._end = function (t) { if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) { this.initiated = !1, this.options.preventDefault && !M(t.target, this.options.preventDefaultException) && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.trigger("touchEnd", { x: this.x, y: this.y }), this.isInTransition = !1; var i = Math.round(this.x), e = Math.round(this.y), s = i - this.absStartX, o = e - this.absStartY; if (this.directionX = 0 < s ? -1 : s < 0 ? 1 : 0, this.directionY = 0 < o ? -1 : o < 0 ? 1 : 0, !this.options.pullDownRefresh || !this._checkPullDown()) if (this._checkClick(t)) this.trigger("scrollCancel"); else if (!this.resetPosition(this.options.bounceTime, I.bounce)) { this._translate(i, e), this.endTime = w(); var n = this.endTime - this.startTime, r = Math.abs(i - this.startX), h = Math.abs(e - this.startY); if (this._events.flick && n < this.options.flickLimitTime && r < this.options.flickLimitDistance && h < this.options.flickLimitDistance) this.trigger("flick"); else { var a = 0; if (this.options.momentum && n < this.options.momentumLimitTime && (h > this.options.momentumLimitDistance || r > this.options.momentumLimitDistance)) { var l = !1, c = !1, p = !1, d = !1, u = this.options.bounce; !1 !== u && (l = void 0 === u.top || u.top, c = void 0 === u.bottom || u.bottom, p = void 0 === u.left || u.left, d = void 0 === u.right || u.right); var m = -1 === this.directionX && p || 1 === this.directionX && d ? this.wrapperWidth : 0, f = -1 === this.directionY && l || 1 === this.directionY && c ? this.wrapperHeight : 0, g = this.hasHorizontalScroll ? W(this.x, this.startX, n, this.maxScrollX, this.minScrollX, m, this.options, this) : { destination: i, duration: 0 }, v = this.hasVerticalScroll ? W(this.y, this.startY, n, this.maxScrollY, this.minScrollY, f, this.options, this) : { destination: e, duration: 0 }; i = g.destination, e = v.destination, a = Math.max(g.duration, v.duration), this.isInTransition = !0 } else this.options.wheel && (e = this._findNearestValidWheel(e).y, a = this.options.wheel.adjustTime || 400); var y = I.swipe; if (this.options.snap) { var x = this._nearestSnap(i, e); this.currentPage = x, a = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(i - x.x), 1e3), Math.min(Math.abs(e - x.y), 1e3)), 300), i = x.x, e = x.y, this.directionX = 0, this.directionY = 0, y = this.options.snap.easing || I.bounce } if (i !== this.x || e !== this.y) return (i > this.minScrollX || i < this.maxScrollX || e > this.minScrollY || e < this.maxScrollY) && (y = I.swipeBounce), void this.scrollTo(i, e, a, y); this.options.wheel && (this.selectedIndex = this._findNearestValidWheel(this.y).index), this.trigger("scrollEnd", { x: this.x, y: this.y }) } } } }, R.prototype._checkClick = function (t) { var i, e, s, o = this.stopFromTransition && !this.pulling; if (this.stopFromTransition = !1, this.moved) return !1; if (this.options.wheel) { if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) { var n = this._findNearestValidWheel(this.y).index, r = Math.round((this.pointY + f(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight); this.target = this.items[n + r] } var h = m(this.target).top, a = m(this.target).left; return h -= this.wrapperOffset.top, h -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0, a -= this.wrapperOffset.left, a -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0, h = this._findNearestValidWheel(h).y, this.scrollTo(a, h, this.options.wheel.adjustTime || 400, I.swipe), !0 } if (o) return !1; var l = this.options.dblclick, c = !1; if (l && this.lastClickTime) { var p = l.delay, d = void 0 === p ? 300 : p; w() - this.lastClickTime < d && (c = !0, P(t, "dblclick")) } return this.options.tap && (i = t, e = this.options.tap, (s = document.createEvent("Event")).initEvent(e, !0, !0), s.pageX = i.pageX, s.pageY = i.pageY, i.target.dispatchEvent(s)), this.options.click && !M(t.target, this.options.preventDefaultException) && P(t), this.lastClickTime = c ? null : w(), !0 }, R.prototype._resize = function () { var t = this; this.enabled && (s && (this.wrapper.scrollTop = 0), clearTimeout(this.resizeTimeout), this.resizeTimeout = setTimeout(function () { t.refresh() }, this.options.resizePolling)) }, R.prototype._startProbe = function () { H(this.probeTimer), this.probeTimer = z(function t() { var i = e.getComputedPosition(); e.trigger("scroll", i), e.isInTransition ? e.probeTimer = z(t) : e.trigger("scrollEnd", i) }); var e = this }, R.prototype._transitionTime = function () { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0; if (this.scrollerStyle[_.transitionDuration] = t + "ms", this.options.wheel) for (var i = 0; i < this.items.length; i++) this.items[i].style[_.transitionDuration] = t + "ms"; if (this.indicators) for (var e = 0; e < this.indicators.length; e++) this.indicators[e].transitionTime(t) }, R.prototype._transitionTimingFunction = function (t) { if (this.scrollerStyle[_.transitionTimingFunction] = t, this.options.wheel) for (var i = 0; i < this.items.length; i++) this.items[i].style[_.transitionTimingFunction] = t; if (this.indicators) for (var e = 0; e < this.indicators.length; e++) this.indicators[e].transitionTimingFunction(t) }, R.prototype._transitionEnd = function (t) { t.target === this.scroller && this.isInTransition && (this._transitionTime(), (!this.pulling || 1 === this.movingDirectionY) && !this.resetPosition(this.options.bounceTime, I.bounce) && (this.isInTransition = !1, 3 !== this.options.probeType && this.trigger("scrollEnd", { x: this.x, y: this.y }))) }, R.prototype._translate = function (t, i, e) { if (C(!c(t) && !c(i), "Translate x or y is null or undefined."), c(e) && (e = this.scale), this.options.useTransform ? this.scrollerStyle[_.transform] = "translate(" + t + "px," + i + "px) scale(" + e + ")" + this.translateZ : (t = Math.round(t), i = Math.round(i), this.scrollerStyle.left = t + "px", this.scrollerStyle.top = i + "px"), this.options.wheel) for (var s = this.options.wheel.rotate, o = void 0 === s ? 25 : s, n = 0; n < this.items.length; n++) { var r = o * (i / this.itemHeight + n); this.items[n].style[_.transform] = "rotateX(" + r + "deg)" } if (this.x = t, this.y = i, this.setScale(e), this.indicators) for (var h = 0; h < this.indicators.length; h++) this.indicators[h].updatePosition() }, R.prototype._animate = function (r, h, a, l) { var c = this, p = this.x, d = this.y, u = this.lastScale, m = this.scale, f = w(), g = f + a; this.isAnimating = !0, H(this.animateTimer), function t() { var i = w(); if (g <= i) return c.isAnimating = !1, c._translate(r, h, m), c.trigger("scroll", { x: c.x, y: c.y }), void (c.pulling || c.resetPosition(c.options.bounceTime) || c.trigger("scrollEnd", {x: c.x, y: c.y})); var e = l(i = (i - f) / a), s = (r - p) * e + p, o = (h - d) * e + d, n = (m - u) * e + u; c._translate(s, o, n), c.isAnimating && (c.animateTimer = z(t)), 3 === c.options.probeType && c.trigger("scroll", { x: c.x, y: c.y }) }() }, R.prototype.scrollBy = function (t, i) { var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : 0, s = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : I.bounce; t = this.x + t, i = this.y + i, this.scrollTo(t, i, e, s) }, R.prototype.scrollTo = function (t, i) { var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : 0, s = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : I.bounce, o = arguments[4]; if (this.options.wheel && (i = this._findNearestValidWheel(i).y), t !== this.x || i !== this.y) if (this.isInTransition = this.options.useTransition && 0 < e && (this.x !== t || this.y !== i), !e || this.options.useTransition) { if (this._transitionTimingFunction(s.style), this._transitionTime(e), this._translate(t, i), e && 3 === this.options.probeType && this._startProbe(), !e && !o) { if (this.options.zoom) return; this.trigger("scroll", { x: t, y: i }), this._reflow = document.body.offsetHeight, this.resetPosition(this.options.bounceTime, I.bounce) || this.trigger("scrollEnd", { x: t, y: i }) } this.options.wheel && (this.selectedIndex = this._findNearestValidWheel(i).index) } else this._animate(t, i, e, s.fn) }, R.prototype.scrollToElement = function (t, i, e, s, o) { if (t && (t = t.nodeType ? t : this.scroller.querySelector(t), !this.options.wheel || t.classList.contains(this.options.wheel.wheelItemClass))) { var n = m(t); n.left -= this.wrapperOffset.left, n.top -= this.wrapperOffset.top, !0 === e && (e = Math.round(t.offsetWidth / 2 - this.wrapper.offsetWidth / 2)), !0 === s && (s = Math.round(t.offsetHeight / 2 - this.wrapper.offsetHeight / 2)), n.left -= e || 0, n.top -= s || 0, n.left = n.left > this.minScrollX ? this.minScrollX : n.left < this.maxScrollX ? this.maxScrollX : n.left, n.top = n.top > this.minScrollY ? this.minScrollY : n.top < this.maxScrollY ? this.maxScrollY : n.top, this.options.wheel && (n.top = this._findNearestValidWheel(n.top).y), this.scrollTo(n.left, n.top, i, o) } }, R.prototype.resetPosition = function () { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0, i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : I.bounce, e = this.x, s = Math.round(e); !this.hasHorizontalScroll || s > this.minScrollX ? e = this.minScrollX : s < this.maxScrollX && (e = this.maxScrollX); var o = this.y, n = Math.round(o); return !this.hasVerticalScroll || n > this.minScrollY ? o = this.minScrollY : n < this.maxScrollY && (o = this.maxScrollY), (e !== this.x || o !== this.y) && (this.scrollTo(e, o, t, i), !0) }, R.prototype.getComputedPosition = function () { var t = window.getComputedStyle(this.scroller, null), i = void 0, e = void 0; return e = this.options.useTransform ? (i = +((t = t[_.transform].split(")")[0].split(", "))[12] || t[4]), +(t[13] || t[5])) : (i = +t.left.replace(/[^-\d.]/g, ""), +t.top.replace(/[^-\d.]/g, "")), { x: i, y: e } }, R.prototype.stop = function () { if (this.options.useTransition && this.isInTransition) { this.isInTransition = !1, H(this.probeTimer); var t = this.getComputedPosition(); this._translate(t.x, t.y), this.options.wheel ? this.target = this.items[this._findNearestValidWheel(t.y).index] : this.trigger("scrollEnd", { x: this.x, y: this.y }), this.stopFromTransition = !0 } else !this.options.useTransition && this.isAnimating && (this.isAnimating = !1, H(this.animateTimer), this.trigger("scrollEnd", { x: this.x, y: this.y }), this.stopFromTransition = !0) }, R.prototype.destroy = function () { this.destroyed = !0, this.trigger("destroy"), this.options.useTransition ? H(this.probeTimer) : H(this.animateTimer), this._removeDOMEvents(), this._events = {} }, (F = K).prototype.on = function (t, i) { var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : this; this._events[t] || (this._events[t] = []), this._events[t].push([i, e]) }, F.prototype.once = function (t, i) { var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : this; function s() { this.off(t, s), i.apply(e, arguments) } s.fn = i, this.on(t, s) }, F.prototype.off = function (t, i) { var e = this._events[t]; if (e) for (var s = e.length; s--;) (e[s][0] === i || e[s][0] && e[s][0].fn === i) && o(e, s) }, F.prototype.trigger = function (t) { var i = this._events[t]; if (i) for (var e = i.length, s = [].concat(function (t) { if (Array.isArray(t)) { for (var i = 0, e = Array(t.length); i < t.length; i++) e[i] = t[i]; return e } return Array.from(t) }(i)), o = 0; o < e; o++) { var n = s[o], r = l(n, 2), h = r[0], a = r[1]; h && h.apply(a, [].slice.call(arguments, 1)) } }, (U = K).prototype._initSnap = function () { var m = this; this.currentPage = {}; var t, i, e, s, f = this.options.snap; if (f.loop) { var o = this.scroller.children; 1 < o.length ? (t = o[o.length - 1].cloneNode(!0), (i = this.scroller).firstChild ? (e = t, (s = i.firstChild).parentNode.insertBefore(e, s)) : i.appendChild(t), this.scroller.appendChild(o[1].cloneNode(!0))) : f.loop = !1 } var g = f.el; "string" == typeof g && (g = this.scroller.querySelectorAll(g)), this.on("refresh", function () { if (m.pages = [], m.wrapperWidth && m.wrapperHeight && m.scrollerWidth && m.scrollerHeight) { var t = f.stepX || m.wrapperWidth, i = f.stepY || m.wrapperHeight, e = 0, s = void 0, o = void 0, n = void 0, r = 0, h = void 0, a = 0, l = void 0, c = void 0; if (g) for (h = g.length, l = -1; r < h; r++) c = X(g[r]), (0 === r || c.left <= X(g[r - 1]).left) && (a = 0, l++), m.pages[a] || (m.pages[a] = []), e = Math.max(-c.left, m.maxScrollX), s = Math.max(-c.top, m.maxScrollY), o = e - Math.round(c.width / 2), n = s - Math.round(c.height / 2), m.pages[a][l] = { x: e, y: s, width: c.width, height: c.height, cx: o, cy: n }, e > m.maxScrollX && a++; else for (o = Math.round(t / 2), n = Math.round(i / 2); e > -m.scrollerWidth;) { for (m.pages[r] = [], s = h = 0; s > -m.scrollerHeight;) m.pages[r][h] = { x: Math.max(e, m.maxScrollX), y: Math.max(s, m.maxScrollY), width: t, height: i, cx: e - o, cy: s - n }, s -= i, h++; e -= t, r++ } m._checkSnapLoop(); var p = f._loopX ? 1 : 0, d = f._loopY ? 1 : 0; m._goToPage(m.currentPage.pageX || p, m.currentPage.pageY || d, 0, void 0, !0); var u = f.threshold; m.snapThresholdY = u % 1 == 0 ? m.snapThresholdX = u : (m.snapThresholdX = Math.round(m.pages[m.currentPage.pageX][m.currentPage.pageY].width * u), Math.round(m.pages[m.currentPage.pageX][m.currentPage.pageY].height * u)) } }), this.on("scrollEnd", function () { f.loop && (f._loopX ? (0 === m.currentPage.pageX && m._goToPage(m.pages.length - 2, m.currentPage.pageY, 0, void 0, !0), m.currentPage.pageX === m.pages.length - 1 && m._goToPage(1, m.currentPage.pageY, 0, void 0, !0)) : (0 === m.currentPage.pageY && m._goToPage(m.currentPage.pageX, m.pages[0].length - 2, 0, void 0, !0), m.currentPage.pageY === m.pages[0].length - 1 && m._goToPage(m.currentPage.pageX, 1, 0, void 0, !0))) }), !1 !== f.listenFlick && this.on("flick", function () { var t = f.speed || Math.max(Math.max(Math.min(Math.abs(m.x - m.startX), 1e3), Math.min(Math.abs(m.y - m.startY), 1e3)), 300); m._goToPage(m.currentPage.pageX + m.directionX, m.currentPage.pageY + m.directionY, t) }), this.on("destroy", function () { if (f.loop) { var t = m.scroller.children; 2 < t.length && (D(m.scroller, t[t.length - 1]), D(m.scroller, t[0])) } }) }, U.prototype._checkSnapLoop = function () { var t = this.options.snap; t.loop && this.pages && this.pages.length && (1 < this.pages.length && (t._loopX = !0), this.pages[0] && 1 < this.pages[0].length && (t._loopY = !0), t._loopX && t._loopY && A("Loop does not support two direction at the same time.")) }, U.prototype._nearestSnap = function (t, i) { if (!this.pages.length) return {x: 0, y: 0, pageX: 0, pageY: 0}; var e = 0; if (Math.abs(t - this.absStartX) <= this.snapThresholdX && Math.abs(i - this.absStartY) <= this.snapThresholdY) return this.currentPage; t > this.minScrollX ? t = this.minScrollX : t < this.maxScrollX && (t = this.maxScrollX), i > this.minScrollY ? i = this.minScrollY : i < this.maxScrollY && (i = this.maxScrollY); for (var s = this.pages.length; e < s; e++) if (t >= this.pages[e][0].cx) { t = this.pages[e][0].x; break } s = this.pages[e].length; for (var o = 0; o < s; o++) if (i >= this.pages[0][o].cy) { i = this.pages[0][o].y; break } return e === this.currentPage.pageX && ((e += this.directionX) < 0 ? e = 0 : e >= this.pages.length && (e = this.pages.length - 1), t = this.pages[e][0].x), o === this.currentPage.pageY && ((o += this.directionY) < 0 ? o = 0 : o >= this.pages[0].length && (o = this.pages[0].length - 1), i = this.pages[0][o].y), { x: t, y: i, pageX: e, pageY: o } }, U.prototype._goToPage = function (t) { var i = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 0, e = arguments[2], s = arguments[3], o = arguments[4], n = this.options.snap; if (n && this.pages && this.pages.length && (s = s || n.easing || I.bounce, t >= this.pages.length ? t = this.pages.length - 1 : t < 0 && (t = 0), this.pages[t])) { i >= this.pages[t].length ? i = this.pages[t].length - 1 : i < 0 && (i = 0); var r = this.pages[t][i].x, h = this.pages[t][i].y; e = void 0 === e ? n.speed || Math.max(Math.max(Math.min(Math.abs(r - this.x), 1e3), Math.min(Math.abs(h - this.y), 1e3)), 300) : e, this.currentPage = { x: r, y: h, pageX: t, pageY: i }, this.scrollTo(r, h, e, s, o) } }, U.prototype.goToPage = function (t, i, e, s) { var o = this.options.snap; if (o && this.pages && this.pages.length) { if (o.loop) { var n = void 0; o._loopX ? ((n = this.pages.length - 2) <= t ? t = n - 1 : t < 0 && (t = 0), t += 1) : ((n = this.pages[0].length - 2) <= i ? i = n - 1 : i < 0 && (i = 0), i += 1) } this._goToPage(t, i, e, s) } }, U.prototype.next = function (t, i) { if (this.options.snap) { var e = this.currentPage.pageX, s = this.currentPage.pageY; ++e >= this.pages.length && this.hasVerticalScroll && (e = 0, s++), this._goToPage(e, s, t, i) } }, U.prototype.prev = function (t, i) { if (this.options.snap) { var e = this.currentPage.pageX, s = this.currentPage.pageY; --e < 0 && this.hasVerticalScroll && (e = 0, s--), this._goToPage(e, s, t, i) } }, U.prototype.getCurrentPage = function () { var t = this.options.snap; return t ? t.loop ? t._loopX ? a({}, this.currentPage, {pageX: this.currentPage.pageX - 1}) : a({}, this.currentPage, {pageY: this.currentPage.pageY - 1}) : this.currentPage : null }, (V = K).prototype.wheelTo = function () { var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0; if (this.options.wheel) { var i = -t * this.itemHeight; this.scrollTo(0, i) } }, V.prototype.getSelectedIndex = function () { return this.options.wheel && this.selectedIndex }, V.prototype._initWheel = function () { var t = this.options.wheel; t.wheelWrapperClass || (t.wheelWrapperClass = "wheel-scroll"), t.wheelItemClass || (t.wheelItemClass = "wheel-item"), t.wheelDisabledItemClass || (t.wheelDisabledItemClass = "wheel-disabled-item"), void 0 === t.selectedIndex && (t.selectedIndex = 0) }, V.prototype._findNearestValidWheel = function (t) { t = 0 < t ? 0 : t < this.maxScrollY ? this.maxScrollY : t; for (var i = this.options.wheel, e = Math.abs(Math.round(-t / this.itemHeight)), s = e, o = this.items; 0 <= e && -1 !== o[e].className.indexOf(i.wheelDisabledItemClass);) e--; if (e < 0) for (e = s; e <= o.length - 1 && -1 !== o[e].className.indexOf(i.wheelDisabledItemClass);) e++; return e === o.length && (e = s), {index: this.wheelItemsAllDisabled ? -1 : e, y: -e * this.itemHeight} }, V.prototype._checkWheelAllDisabled = function () { var t = this.options.wheel, i = this.items; this.wheelItemsAllDisabled = !0; for (var e = 0; e < i.length; e++) if (-1 === i[e].className.indexOf(t.wheelDisabledItemClass)) { this.wheelItemsAllDisabled = !1; break } }, (B = K).prototype._initScrollbar = function () { var i = this, t = this.options.scrollbar, e = t.fade, s = void 0 === e || e, o = t.interactive, n = void 0 !== o && o; this.indicators = []; var r = void 0; this.options.scrollX && (r = { el: O("horizontal"), direction: "horizontal", fade: s, interactive: n }, this._insertScrollBar(r.el), this.indicators.push(new L(this, r))), this.options.scrollY && (r = { el: O("vertical"), direction: "vertical", fade: s, interactive: n }, this._insertScrollBar(r.el), this.indicators.push(new L(this, r))), this.on("refresh", function () { for (var t = 0; t < i.indicators.length; t++) i.indicators[t].refresh() }), s && (this.on("scrollEnd", function () { for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade() }), this.on("scrollCancel", function () { for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade() }), this.on("scrollStart", function () { for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade(!0) }), this.on("beforeScrollStart", function () { for (var t = 0; t < i.indicators.length; t++) i.indicators[t].fade(!0, !0) })), this.on("destroy", function () { i._removeScrollBars() }) }, B.prototype._insertScrollBar = function (t) { this.wrapper.appendChild(t) }, B.prototype._removeScrollBars = function () { for (var t = 0; t < this.indicators.length; t++) this.indicators[t].destroy() }, (q = K).prototype._initPullDown = function () { this.options.probeType = 3 }, q.prototype._checkPullDown = function () { var t = this.options.pullDownRefresh, i = t.threshold, e = void 0 === i ? 90 : i, s = t.stop, o = void 0 === s ? 40 : s; return !(-1 !== this.directionY || this.y < e) && (this.pulling || (this.pulling = !0, this.trigger("pullingDown")), this.scrollTo(this.x, o, this.options.bounceTime, I.bounce), this.pulling) }, q.prototype.finishPullDown = function () { this.pulling = !1, this.resetPosition(this.options.bounceTime, I.bounce) }, q.prototype.openPullDown = function () { var t = !(0 < arguments.length && void 0 !== arguments[0]) || arguments[0]; this.options.pullDownRefresh = t, this._initPullDown() }, q.prototype.closePullDown = function () { this.options.pullDownRefresh = !1 }, q.prototype.autoPullDownRefresh = function () { var t = this.options.pullDownRefresh, i = t.threshold, e = void 0 === i ? 90 : i, s = t.stop, o = void 0 === s ? 40 : s; this.pulling || (this.pulling = !0, this.scrollTo(this.x, e), this.trigger("pullingDown"), this.scrollTo(this.x, o, this.options.bounceTime, I.bounce)) }, (Z = K).prototype._initPullUp = function () { this.options.probeType = 3, this.pullupWatching = !1, this._watchPullUp() }, Z.prototype._watchPullUp = function () { this.pullupWatching || (this.pullupWatching = !0, this.on("scroll", this._checkToEnd)) }, Z.prototype._checkToEnd = function (t) { var i = this, e = this.options.pullUpLoad.threshold, s = void 0 === e ? 0 : e; 1 === this.movingDirectionY && t.y <= this.maxScrollY + s && (this.once("scrollEnd", function () { i.pullupWatching = !1 }), this.trigger("pullingUp"), this.off("scroll", this._checkToEnd)) }, Z.prototype.finishPullUp = function () { var t = this; this.pullupWatching ? this.once("scrollEnd", function () { t._watchPullUp() }) : this._watchPullUp() }, Z.prototype.openPullUp = function () { var t = !(0 < arguments.length && void 0 !== arguments[0]) || arguments[0]; this.options.pullUpLoad = t, this._initPullUp() }, Z.prototype.closePullUp = function () { this.options.pullUpLoad = !1, this.pullupWatching && (this.pullupWatching = !1, this.off("scroll", this._checkToEnd)) }, (j = K).prototype._initMouseWheel = function () { var t = this; this._handleMouseWheelEvent(p), this.on("destroy", function () { clearTimeout(t.mouseWheelTimer), clearTimeout(t.mouseWheelEndTimer), t._handleMouseWheelEvent(u) }), this.firstWheelOpreation = !0 }, j.prototype._handleMouseWheelEvent = function (t) { t(this.wrapper, "wheel", this), t(this.wrapper, "mousewheel", this), t(this.wrapper, "DOMMouseScroll", this) }, j.prototype._onMouseWheel = function (t) { var i = this; if (this.enabled) { t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.firstWheelOpreation && this.trigger("scrollStart"), this.firstWheelOpreation = !1; var e = this.options.mouseWheel, s = e.speed, o = void 0 === s ? 20 : s, n = e.invert, r = void 0 !== n && n, h = e.easeTime, a = void 0 === h ? 300 : h; clearTimeout(this.mouseWheelTimer), this.mouseWheelTimer = setTimeout(function () { i.options.snap || a || i.trigger("scrollEnd", {x: i.x, y: i.y}), i.firstWheelOpreation = !0 }, 400); var l = void 0, c = void 0; switch (!0) { case"deltaX" in t: c = 1 === t.deltaMode ? (l = -t.deltaX * o, -t.deltaY * o) : (l = -t.deltaX, -t.deltaY); break; case"wheelDeltaX" in t: l = t.wheelDeltaX / 120 * o, c = t.wheelDeltaY / 120 * o; break; case"wheelDelta" in t: l = c = t.wheelDelta / 120 * o; break; case"detail" in t: l = c = -t.detail / 3 * o; break; default: return } var p = r ? -1 : 1; l *= p, c *= p, this.hasVerticalScroll || (l = c, c = 0); var d = void 0, u = void 0; if (this.options.snap) return d = this.currentPage.pageX, u = this.currentPage.pageY, 0 < l ? d-- : l < 0 && d++, 0 < c ? u-- : c < 0 && u++, void this._goToPage(d, u); d = this.x + Math.round(this.hasHorizontalScroll ? l : 0), u = this.y + Math.round(this.hasVerticalScroll ? c : 0), this.movingDirectionX = this.directionX = 0 < l ? -1 : l < 0 ? 1 : 0, this.movingDirectionY = this.directionY = 0 < c ? -1 : c < 0 ? 1 : 0, d > this.minScrollX ? d = this.minScrollX : d < this.maxScrollX && (d = this.maxScrollX), u > this.minScrollY ? u = this.minScrollY : u < this.maxScrollY && (u = this.maxScrollY); var m = this.y === u; this.scrollTo(d, u, a, I.swipe), this.trigger("scroll", { x: this.x, y: this.y }), clearTimeout(this.mouseWheelEndTimer), m && (this.mouseWheelEndTimer = setTimeout(function () { i.trigger("scrollEnd", {x: i.x, y: i.y}) }, a)) } }, (G = K).prototype._initZoom = function () { var t = this.options.zoom, i = t.start, e = void 0 === i ? 1 : i, s = t.min, o = void 0 === s ? 1 : s, n = t.max, r = void 0 === n ? 4 : n; this.scale = Math.min(Math.max(e, o), r), this.setScale(this.scale), this.scrollerStyle[_.transformOrigin] = "0 0" }, G.prototype._zoomTo = function (t, i, e, s) { this.scaled = !0; var o = t / (s || this.scale); this.setScale(t), this.refresh(); var n = Math.round(this.startX - (i - this.relativeX) * (o - 1)), r = Math.round(this.startY - (e - this.relativeY) * (o - 1)); n > this.minScrollX ? n = this.minScrollX : n < this.maxScrollX && (n = this.maxScrollX), r > this.minScrollY ? r = this.minScrollY : r < this.maxScrollY && (r = this.maxScrollY), this.x === n && this.y === r || this.scrollTo(n, r, this.options.bounceTime), this.scaled = !1 }, G.prototype.zoomTo = function (t, i, e) { var s = f(this.wrapper), o = s.left, n = s.top, r = i + o - this.x, h = e + n - this.y; this._zoomTo(t, r, h) }, G.prototype._zoomStart = function (t) { var i = t.touches[0], e = t.touches[1], s = Math.abs(i.pageX - e.pageX), o = Math.abs(i.pageY - e.pageY); this.startDistance = d(s, o), this.startScale = this.scale; var n = f(this.wrapper), r = n.left, h = n.top; this.originX = Math.abs(i.pageX + e.pageX) / 2 + r - this.x, this.originY = Math.abs(i.pageY + e.pageY) / 2 + h - this.y, this.trigger("zoomStart") }, G.prototype._zoom = function (t) { if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) { this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(); var i = t.touches[0], e = t.touches[1], s = d(Math.abs(i.pageX - e.pageX), Math.abs(i.pageY - e.pageY)) / this.startDistance * this.startScale; this.scaled = !0; var o = this.options.zoom, n = o.min, r = void 0 === n ? 1 : n, h = o.max, a = void 0 === h ? 4 : h; s < r ? s = .5 * r * Math.pow(2, s / r) : a < s && (s = 2 * a * Math.pow(.5, a / s)); var l = s / this.startScale, c = this.startX - (this.originX - this.relativeX) * (l - 1), p = this.startY - (this.originY - this.relativeY) * (l - 1); this.setScale(s), this.scrollTo(c, p, 0) } }, G.prototype._zoomEnd = function (t) { if (this.enabled && !this.destroyed && Y[t.type] === this.initiated) { this.options.preventDefault && t.preventDefault(), this.options.stopPropagation && t.stopPropagation(), this.isInTransition = !1, this.isAnimating = !1, this.initiated = 0; var i = this.options.zoom, e = i.min, s = void 0 === e ? 1 : e, o = i.max, n = void 0 === o ? 4 : o, r = this.scale > n ? n : this.scale < s ? s : this.scale; this._zoomTo(r, this.originX, this.originY, this.startScale), this.trigger("zoomEnd") } }, K.prototype._initInfinite = function () { this.options.probeType = 3, this.maxScrollY = -2e3, this.infiniteScroller = new J(this, this.options.infinity) }, K.Version = "1.15.2", K });