Blame | Last modification | View Log | RSS feed
(function() {function n(p, m) {var q = this, r = document, o;q.wrapper = typeof p == "object" ? p : r.getElementById(p);q.wrapper.style.overflow = "hidden";q.scroller = q.wrapper.children[0];q.scroller.style.cssText += "-webkit-transition-property:-webkit-transform;-webkit-transform-origin:0 0;-webkit-transform:"+ a + "0,0" + g;q.scroller.style.cssText += "-webkit-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-webkit-transition-duration:0;";q.options = {hScroll : true,vScroll : true,bounce : i,bounceLock : false,momentum : i,lockDirection : true,hScrollbar : true,vScrollbar : true,fixedScrollbar : k,fadeScrollbar : (l && i) || !h,hideScrollbar : l || !h,scrollbarClass : "",onScrollStart : null,onScrollEnd : null,};for (o in m) {q.options[o] = m[o]}q.options.hScrollbar = q.options.hScroll && q.options.hScrollbar;q.options.vScrollbar = q.options.vScroll && q.options.vScrollbar;q.refresh();q._bind(j, window);q._bind(e)}n.prototype = {x : 0,y : 0,handleEvent : function(o) {var m = this;switch (o.type) {case e:m._start(o);break;case d:m._move(o);break;case f:case b:m._end(o);break;case "webkitTransitionEnd":m._transitionEnd(o);break;case j:m._resize();break}},_scrollbar : function(m) {var p = this, q = document, o;if (!p[m + "Scrollbar"]) {if (p[m + "ScrollbarWrapper"]) {p[m + "ScrollbarIndicator"].style.webkitTransform = "";p[m + "ScrollbarWrapper"].parentNode.removeChild(p[m+ "ScrollbarWrapper"]);p[m + "ScrollbarWrapper"] = null;p[m + "ScrollbarIndicator"] = null}return}if (!p[m + "ScrollbarWrapper"]) {o = q.createElement("div");if (p.options.scrollbarClass) {o.className = p.options.scrollbarClass + m.toUpperCase()} else {o.style.cssText = "position:absolute;z-index:100;"+ (m == "h" ? "height:7px;bottom:1px;left:2px;right:7px": "width:7px;bottom:7px;top:2px;right:1px")}o.style.cssText += "pointer-events:none;-webkit-transition-property:opacity;-webkit-transition-duration:"+ (p.options.fadeScrollbar ? "350ms" : "0")+ ";overflow:hidden;opacity:"+ (p.options.hideScrollbar ? "0" : "1");p.wrapper.appendChild(o);p[m + "ScrollbarWrapper"] = o;o = q.createElement("div");if (!p.options.scrollbarClass) {o.style.cssText = "position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);-webkit-background-clip:padding-box;-webkit-box-sizing:border-box;"+ (m == "h" ? "height:100%;-webkit-border-radius:4px 3px;": "width:100%;-webkit-border-radius:3px 4px;")}o.style.cssText += "pointer-events:none;-webkit-transition-property:-webkit-transform;-webkit-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-webkit-transition-duration:0;-webkit-transform:"+ a + "0,0" + g;p[m + "ScrollbarWrapper"].appendChild(o);p[m + "ScrollbarIndicator"] = o}if (m == "h") {p.hScrollbarSize = p.hScrollbarWrapper.clientWidth;p.hScrollbarIndicatorSize = c.max(c.round(p.hScrollbarSize* p.hScrollbarSize / p.scrollerW), 8);p.hScrollbarIndicator.style.width = p.hScrollbarIndicatorSize+ "px";p.hScrollbarMaxScroll = p.hScrollbarSize- p.hScrollbarIndicatorSize;p.hScrollbarProp = p.hScrollbarMaxScroll / p.maxScrollX} else {p.vScrollbarSize = p.vScrollbarWrapper.clientHeight;p.vScrollbarIndicatorSize = c.max(c.round(p.vScrollbarSize* p.vScrollbarSize / p.scrollerH), 8);p.vScrollbarIndicator.style.height = p.vScrollbarIndicatorSize+ "px";p.vScrollbarMaxScroll = p.vScrollbarSize- p.vScrollbarIndicatorSize;p.vScrollbarProp = p.vScrollbarMaxScroll / p.maxScrollY}p._indicatorPos(m, true)},_resize : function() {var m = this;setTimeout(function() {m.refresh()}, 0)},_pos : function(m, p) {var o = this;o.x = o.hScroll ? m : 0;o.y = o.vScroll ? p : 0;o.scroller.style.webkitTransform = a + o.x + "px," + o.y + "px" + g;o._indicatorPos("h");o._indicatorPos("v")},_indicatorPos : function(m, p) {var o = this, q = m == "h" ? o.x : o.y;if (!o[m + "Scrollbar"]) {return}q = o[m + "ScrollbarProp"] * q;if (q < 0) {q = o.options.fixedScrollbar ? 0 : q + q * 3;if (o[m + "ScrollbarIndicatorSize"] + q < 9) {q = -o[m + "ScrollbarIndicatorSize"] + 8}} else {if (q > o[m + "ScrollbarMaxScroll"]) {q = o.options.fixedScrollbar ? o[m + "ScrollbarMaxScroll"]: q + (q - o[m + "ScrollbarMaxScroll"]) * 3;if (o[m + "ScrollbarIndicatorSize"]+ o[m + "ScrollbarMaxScroll"] - q < 9) {q = o[m + "ScrollbarIndicatorSize"]+ o[m + "ScrollbarMaxScroll"] - 8}}}o[m + "ScrollbarWrapper"].style.webkitTransitionDelay = "0";o[m + "ScrollbarWrapper"].style.opacity = p&& o.options.hideScrollbar ? "0" : "1";o[m + "ScrollbarIndicator"].style.webkitTransform = a+ (m == "h" ? q + "px,0" : "0," + q + "px") + g},_transitionTime : function(o) {var m = this;o += "ms";m.scroller.style.webkitTransitionDuration = o;if (m.hScrollbar) {m.hScrollbarIndicator.style.webkitTransitionDuration = o}if (m.vScrollbar) {m.vScrollbarIndicator.style.webkitTransitionDuration = o}},_start : function(q) {var p = this, m = h ? q.changedTouches[0] : q, o;p.moved = false;q.preventDefault();p.moved = false;p.distX = 0;p.distY = 0;p.absDistX = 0;p.absDistY = 0;p.dirX = 0;p.dirY = 0;p.returnTime = 0;p._transitionTime(0);if (p.options.momentum) {o = new WebKitCSSMatrix(window.getComputedStyle(p.scroller,null).webkitTransform);if (o.m41 != p.x || o.m42 != p.y) {p._unbind("webkitTransitionEnd");p._pos(o.m41, o.m42)}}p.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)";if (p.hScrollbar) {p.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"}if (p.vScrollbar) {p.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.66,0.66,1)"}p.startX = p.x;p.startY = p.y;p.pointX = m.pageX;p.pointY = m.pageY;p.startTime = q.timeStamp;if (p.options.onScrollStart) {p.options.onScrollStart.call(p)}p._bind(d);p._bind(f);p._bind(b)},_move : function(s) {if (h && s.touches.length > 1) {return}var q = this, o = h ? s.changedTouches[0] : s, p = o.pageX- q.pointX, m = o.pageY - q.pointY, t = q.x + p, r = q.y+ m;s.preventDefault();q.pointX = o.pageX;q.pointY = o.pageY;if (t > 0 || t < q.maxScrollX) {t = q.options.bounce ? q.x + (p / 2.4) : t >= 0|| q.maxScrollX >= 0 ? 0 : q.maxScrollX}if (r > 0 || r < q.maxScrollY) {r = q.options.bounce ? q.y + (m / 2.4) : r >= 0|| q.maxScrollY >= 0 ? 0 : q.maxScrollY}if (q.absDistX < 4 && q.absDistY < 4) {q.distX += p;q.distY += m;q.absDistX = c.abs(q.distX);q.absDistY = c.abs(q.distY);return}if (q.options.lockDirection) {if (q.absDistX > q.absDistY + 3) {r = q.y;m = 0} else {if (q.absDistY > q.absDistX + 3) {t = q.x;p = 0}}}q.moved = true;q._pos(t, r);q.dirX = p > 0 ? -1 : p < 0 ? 1 : 0;q.dirY = m > 0 ? -1 : m < 0 ? 1 : 0;if (s.timeStamp - q.startTime > 300) {q.startTime = s.timeStamp;q.startX = q.x;q.startY = q.y}},_end : function(t) {if (h && t.touches.length != 0) {return}var r = this, x = h ? t.changedTouches[0] : t, u, w, p = {dist : 0,time : 0}, m = {dist : 0,time : 0}, q = t.timeStamp - r.startTime, v = r.x, s = r.y, o;r._unbind(d);r._unbind(f);r._unbind(b);if (!r.moved) {if (h) {r.doubleTapTimer = null;u = x.target;while (u.nodeType != 1) {u = u.parentNode}w = document.createEvent("MouseEvents");w.initMouseEvent("click", true, true, t.view, 1, x.screenX,x.screenY, x.clientX, x.clientY, t.ctrlKey,t.altKey, t.shiftKey, t.metaKey, 0, null);w._fake = true;u.dispatchEvent(w)}r._resetPos();return}if (q < 300 && r.options.momentum) {p = v ? r._momentum(v - r.startX, q, -r.x, r.scrollerW- r.wrapperW + r.x, r.options.bounce ? r.wrapperW : 0): p;m = s ? r._momentum(s - r.startY, q, -r.y,(r.maxScrollY < 0 ? r.scrollerH - r.wrapperH+ r.y : 0),r.options.bounce ? r.wrapperH : 0) : m;v = r.x + p.dist;s = r.y + m.dist;if ((r.x > 0 && v > 0)|| (r.x < r.maxScrollX && v < r.maxScrollX)) {p = {dist : 0,time : 0}}if ((r.y > 0 && s > 0)|| (r.y < r.maxScrollY && s < r.maxScrollY)) {m = {dist : 0,time : 0}}}if (p.dist || m.dist) {o = c.max(c.max(p.time, m.time), 10);r.scrollTo(v, s, o);return}r._resetPos(200)},_resetPos : function(p) {var m = this, q = m.x, o = m.y;if (m.x >= 0) {q = 0} else {if (m.x < m.maxScrollX) {q = m.maxScrollX}}if (m.y >= 0 || m.maxScrollY > 0) {o = 0} else {if (m.y < m.maxScrollY) {o = m.maxScrollY}}if (q == m.x && o == m.y) {if (m.moved) {if (m.options.onScrollEnd) {m.options.onScrollEnd.call(m)}m.moved = false}if (m.hScrollbar && m.options.hideScrollbar) {m.hScrollbarWrapper.style.webkitTransitionDelay = "300ms";m.hScrollbarWrapper.style.opacity = "0"}if (m.vScrollbar && m.options.hideScrollbar) {m.vScrollbarWrapper.style.webkitTransitionDelay = "300ms";m.vScrollbarWrapper.style.opacity = "0"}return}if (p) {m.scroller.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)";if (m.hScrollbar) {m.hScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"}if (m.vScrollbar) {m.vScrollbarIndicator.style.webkitTransitionTimingFunction = "cubic-bezier(0.33,0.0,0.33,1)"}}m.scrollTo(q, o, p || 0)},_transitionEnd : function(o) {var m = this;if (o) {o.stopPropagation()}m._unbind("webkitTransitionEnd");m._resetPos(m.returnTime);m.returnTime = 0},_momentum : function(v, p, t, m, x) {var s = this, u = 0.0006, q = c.abs(v) / p, o = (q * q) / (2 * u), w = 0, r = 0;if (v > 0 && o > t) {r = x / (6 / (o / q * u));t = t + r;s.returnTime = 800 / x * r + 100;q = q * t / o;o = t} else {if (v < 0 && o > m) {r = x / (6 / (o / q * u));m = m + r;s.returnTime = 800 / x * r + 100;q = q * m / o;o = m}}o = o * (v < 0 ? -1 : 1);w = q / u;return {dist : o,time : c.round(w)}},_offset : function(o, m) {var q = -o.offsetLeft, p = -o.offsetTop;if (!m) {return {x : q,y : p}}while (o = o.offsetParent) {q -= o.offsetLeft;p -= o.offsetTop}return {x : q,y : p}},_bind : function(o, m) {(m || this.scroller).addEventListener(o, this, false)},_unbind : function(o, m) {(m || this.scroller).removeEventListener(o, this, false)},destroy : function() {var m = this;m.hScrollbar = false;m.vScrollbar = false;m._scrollbar("h");m._scrollbar("v");m.scroller.style.webkitTransform = "";m._unbind("webkitTransitionEnd");m._unbind(j);m._unbind(e);m._unbind(d);m._unbind(f);m._unbind(b)},refresh : function() {var m = this;m.wrapperW = m.wrapper.clientWidth;m.wrapperH = m.wrapper.clientHeight;m.scrollerW = m.scroller.offsetWidth;m.scrollerH = m.scroller.offsetHeight;m.maxScrollX = m.wrapperW - m.scrollerW;m.maxScrollY = m.wrapperH - m.scrollerH;m.dirX = 0;m.dirY = 0;m._transitionTime(0);m.hScroll = m.options.hScroll && m.maxScrollX < 0;m.vScroll = m.options.vScroll&& (!m.options.bounceLock && !m.hScroll || m.scrollerH > m.wrapperH);m.hScrollbar = m.hScroll && m.options.hScrollbar;m.vScrollbar = m.vScroll && m.options.vScrollbar&& m.scrollerH > m.wrapperH;m._scrollbar("h");m._scrollbar("v");m._resetPos()},scrollTo : function(m, r, q, p) {var o = this;if (p) {m = o.x - m;r = o.y - r}q = !q|| (c.round(o.x) == c.round(m) && c.round(o.y) == c.round(r)) ? 0 : q;o.moved = true;if (q) {o._bind("webkitTransitionEnd")}o._transitionTime(q);o._pos(m, r);if (!q) {setTimeout(function() {o._transitionEnd()}, 0)}},scrollToElement : function(m, p) {var o = this, q;m = m.nodeType ? m : o.scroller.querySelector(m);if (!m) {return}q = o._offset(m);q.x = q.x > 0 ? 0 : q.x < o.maxScrollX ? o.maxScrollX : q.x;q.y = q.y > 0 ? 0 : q.y < o.maxScrollY ? o.maxScrollY : q.y;p = p === undefined ? c.max(c.abs(q.x) * 2, c.abs(q.y) * 2) : p;o.scrollTo(q.x, q.y, p)}};var i = "WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix(), h = "ontouchstart" in window, l = (/iphone|ipad/gi).test(navigator.appVersion), k = (/android/gi).test(navigator.appVersion), j = "onorientationchange" in window ? "orientationchange": "resize", e = h ? "touchstart" : "mousedown", d = h ? "touchmove": "mousemove", f = h ? "touchend" : "mouseup", b = h ? "touchcancel": "mouseup", a = "translate" + (i ? "3d(" : "("), g = i ? ",0)": ")", c = Math;if (typeof exports !== "undefined") {exports.iScroll = n} else {window.iScroll = n}})();