Skip to content

Instantly share code, notes, and snippets.

@kamwing
Forked from cheeaun/ac_iscroll.js
Created May 4, 2012 15:44
Show Gist options
  • Save kamwing/2595629 to your computer and use it in GitHub Desktop.
Save kamwing/2595629 to your computer and use it in GitHub Desktop.
if (typeof AC == "undefined") {
AC = {}
}
if (typeof iScroll !== "undefined") {
AC.iScroll = window.iScroll;
AC.iScroll.prototype = Object.extend(Object.clone(window.iScroll.prototype), {
isTouch: function () {
return (AC.Detector.isMobile() || AC.Detector.isiPad())
},
touchStart: function (c) {
var b = this,
a;
if (b.options.allowPinchToZoom == true && "touches" in c && c.touches.length > 1) {
return
} else {
if (!b.enabled) {
return
}
}
if (b.options.allowNativeScroll !== true) {
c.preventDefault()
}
if (b.options.desktopCompatibility && !b.isTouch()) {
c.preventDefault()
}
if ("onTouchStart" in b.options && typeof b.options.onTouchStart === "function") {
b.options.onTouchStart(c)
}
b.element.addClassName("ac-iscroll-scrolling");
b.scrolling = true;
b.moved = false;
b.distX = 0;
b.distY = 0;
b.absDistX = 0;
b.absDistY = 0;
b.setTransitionTime("0");
if (b.options.momentum || b.options.snap) {
a = new WebKitCSSMatrix(window.getComputedStyle(b.element).webkitTransform);
if (a.e != b.x || a.f != b.y) {
document.removeEventListener("webkitTransitionEnd", b, false);
b.setPosition(a.e, a.f);
b.moved = true
}
}
b.touchStartX = b.isTouch() ? c.changedTouches[0].pageX : c.pageX;
b.scrollStartX = b.x;
b.touchStartY = b.isTouch() ? c.changedTouches[0].pageY : c.pageY;
b.scrollStartY = b.y;
b.scrollStartTime = c.timeStamp;
b.directionX = 0;
b.directionY = 0
},
touchMove: function (h) {
if (!this.scrolling) {
return
}
var f = this,
d = f.isTouch() ? h.changedTouches[0].pageX : h.pageX,
c = f.isTouch() ? h.changedTouches[0].pageY : h.pageY,
b = f.scrollX ? d - f.touchStartX : 0,
a = f.scrollY ? c - f.touchStartY : 0,
i = f.x + b,
g = f.y + a;
f.absDistX += Math.abs(d - f.touchStartX);
f.absDistY += Math.abs(c - f.touchStartY);
f.touchStartX = d;
f.touchStartY = c;
if (i >= 0 || i < f.maxScrollX) {
i = f.options.bounce ? Math.round(f.x + b / 3) : (i >= 0 || f.maxScrollX >= 0) ? 0 : f.maxScrollX
}
if (g >= 0 || g < f.maxScrollY) {
g = f.options.bounce ? Math.round(f.y + a / 3) : (g >= 0 || f.maxScrollY >= 0) ? 0 : f.maxScrollY
}
if (f.distX + f.distY > (f.options.threshold || 20) && f.scrolling) {
if ("onTouchMove" in f.options && typeof f.options.onTouchMove === "function") {
f.options.onTouchMove(h)
}
if (f.distX - 3 > f.distY) {
g = f.y;
a = 0
} else {
if (f.distY - 3 > f.distX) {
i = f.x;
b = 0
}
}
f.setPosition(i, g);
f.moved = true;
f.directionX = b > 0 ? -1 : 1;
f.directionY = a > 0 ? -1 : 1
} else {
f.distX += Math.abs(b);
f.distY += Math.abs(a)
}
if ((f.scrollX && !f.scrollY && f.absDistX > f.absDistY) || (f.scrollY && !f.scrollX && f.absDistY > f.absDistX)) {
h.preventDefault();
h.stopPropagation()
}
},
touchEnd: function (j) {
if (!this.scrolling) {
return
}
var i = this,
d = j.timeStamp - i.scrollStartTime,
m = i.isTouch() ? j.changedTouches[0] : j,
k, l, c, a, b = 0,
h = i.x,
g = i.y,
f;
if ("onTouchEnd" in i.options && typeof i.options.onTouchEnd === "function") {
i.options.onTouchEnd(j)
}
i.scrolling = false;
if (!i.moved) {
i.element.removeClassName("ac-iscroll-scrolling");
i.resetPosition();
if (i.isTouch()) {
k = m.target;
while (k.nodeType != 1) {
k = k.parentNode
}
l = document.createEvent("MouseEvents");
l.initMouseEvent("click", true, true, j.view, 1, m.screenX, m.screenY, m.clientX, m.clientY, j.ctrlKey, j.altKey, j.shiftKey, j.metaKey, 0, null);
l._fake = true;
k.dispatchEvent(l)
}
return
}
if (!i.options.snap && d > 250) {
i.resetPosition();
return
}
if (i.options.momentum) {
c = i.scrollX === true ? i.momentum(i.x - i.scrollStartX, d, i.options.bounce ? -i.x + i.scrollWidth / 5 : -i.x, i.options.bounce ? i.x + i.scrollerWidth - i.scrollWidth + i.scrollWidth / 5 : i.x + i.scrollerWidth - i.scrollWidth) : {
dist: 0,
time: 0
};
a = i.scrollY === true ? i.momentum(i.y - i.scrollStartY, d, i.options.bounce ? -i.y + i.scrollHeight / 5 : -i.y, i.options.bounce ? (i.maxScrollY < 0 ? i.y + i.scrollerHeight - i.scrollHeight : 0) + i.scrollHeight / 5 : i.y + i.scrollerHeight - i.scrollHeight) : {
dist: 0,
time: 0
};
b = Math.max(Math.max(c.time, a.time), 1);
h = i.x + c.dist;
g = i.y + a.dist
}
if (i.options.snap) {
if (typeof i.incomingWidth !== "undefined") {
i.scrollWidth = i.incomingWidth
}
f = i.snap(h, g);
h = f.x;
g = f.y;
b = Math.max(f.time, b)
}
i.scrollTo(h, g, b + "ms")
},
transitionEnd: function (b) {
var a = this;
if ("onTransitionEnd" in a.options && typeof a.options.onTransitionEnd === "function") {
a.options.onTransitionEnd(b)
}
document.removeEventListener("webkitTransitionEnd", a, false);
a.resetPosition();
a.element.removeClassName("ac-iscroll-scrolling")
}
})
};
(function () {
function j(n, l) {
var o = this,
m;
o.element = typeof n == "object" ? n : document.getElementById(n);
o.wrapper = o.element.parentNode;
o.element.style.webkitTransitionProperty = "-webkit-transform";
o.element.style.webkitTransitionTimingFunction = "cubic-bezier(0,0,0.25,1)";
o.element.style.webkitTransitionDuration = "0";
o.element.style.webkitTransform = h + "0,0" + b;
o.options = {
bounce: d,
momentum: d,
checkDOMChanges: true,
topOnDOMChanges: false,
hScrollbar: d,
vScrollbar: d,
fadeScrollbar: g || !a,
shrinkScrollbar: g || !a,
desktopCompatibility: false,
overflow: "auto",
snap: false,
bounceLock: false,
scrollbarColor: "rgba(0,0,0,0.5)",
onScrollEnd: function () {}
};
if (typeof l == "object") {
for (m in l) {
o.options[m] = l[m]
}
}
if (o.options.desktopCompatibility) {
o.options.overflow = "hidden"
}
o.onScrollEnd = o.options.onScrollEnd;
delete o.options.onScrollEnd;
o.wrapper.style.overflow = o.options.overflow;
o.refresh();
window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", o, false);
if (a || o.options.desktopCompatibility) {
o.element.addEventListener(f, o, false);
o.element.addEventListener(i, o, false);
o.element.addEventListener(e, o, false)
}
if (o.options.checkDOMChanges) {
o.element.addEventListener("DOMSubtreeModified", o, false)
}
}
j.prototype = {
x: 0,
y: 0,
enabled: true,
handleEvent: function (m) {
var l = this;
switch (m.type) {
case f:
l.touchStart(m);
break;
case i:
l.touchMove(m);
break;
case e:
l.touchEnd(m);
break;
case "webkitTransitionEnd":
l.transitionEnd();
break;
case "orientationchange":
case "resize":
l.refresh();
break;
case "DOMSubtreeModified":
l.onDOMModified(m);
break
}
},
onDOMModified: function (m) {
var l = this;
if (m.target.parentNode != l.element) {
return
}
setTimeout(function () {
l.refresh()
}, 0);
if (l.options.topOnDOMChanges && (l.x != 0 || l.y != 0)) {
l.scrollTo(0, 0, "0")
}
},
refresh: function () {
var m = this,
o = m.x,
n = m.y,
l;
m.scrollWidth = m.wrapper.clientWidth;
m.scrollHeight = m.wrapper.clientHeight;
m.scrollerWidth = m.element.offsetWidth;
m.scrollerHeight = m.element.offsetHeight;
m.maxScrollX = m.scrollWidth - m.scrollerWidth;
m.maxScrollY = m.scrollHeight - m.scrollerHeight;
m.directionX = 0;
m.directionY = 0;
if (m.scrollX) {
if (m.maxScrollX >= 0) {
o = 0
} else {
if (m.x < m.maxScrollX) {
o = m.maxScrollX
}
}
}
if (m.scrollY) {
if (m.maxScrollY >= 0) {
n = 0
} else {
if (m.y < m.maxScrollY) {
n = m.maxScrollY
}
}
}
if (m.options.snap) {
m.maxPageX = -Math.floor(m.maxScrollX / m.scrollWidth);
m.maxPageY = -Math.floor(m.maxScrollY / m.scrollHeight);
l = m.snap(o, n);
o = l.x;
n = l.y
}
if (o != m.x || n != m.y) {
m.setTransitionTime("0");
m.setPosition(o, n, true)
}
m.scrollX = m.scrollerWidth > m.scrollWidth;
m.scrollY = !m.options.bounceLock && !m.scrollX || m.scrollerHeight > m.scrollHeight;
if (m.options.hScrollbar && m.scrollX) {
m.scrollBarX = m.scrollBarX || new k("horizontal", m.wrapper, m.options.fadeScrollbar, m.options.shrinkScrollbar, m.options.scrollbarColor);
m.scrollBarX.init(m.scrollWidth, m.scrollerWidth)
} else {
if (m.scrollBarX) {
m.scrollBarX = m.scrollBarX.remove()
}
}
if (m.options.vScrollbar && m.scrollY && m.scrollerHeight > m.scrollHeight) {
m.scrollBarY = m.scrollBarY || new k("vertical", m.wrapper, m.options.fadeScrollbar, m.options.shrinkScrollbar, m.options.scrollbarColor);
m.scrollBarY.init(m.scrollHeight, m.scrollerHeight)
} else {
if (m.scrollBarY) {
m.scrollBarY = m.scrollBarY.remove()
}
}
},
setPosition: function (l, o, n) {
var m = this;
m.x = l;
m.y = o;
m.element.style.webkitTransform = h + m.x + "px," + m.y + "px" + b;
if (!n) {
if (m.scrollBarX) {
m.scrollBarX.setPosition(m.x)
}
if (m.scrollBarY) {
m.scrollBarY.setPosition(m.y)
}
}
},
setTransitionTime: function (m) {
var l = this;
m = m || "0";
l.element.style.webkitTransitionDuration = m;
if (l.scrollBarX) {
l.scrollBarX.bar.style.webkitTransitionDuration = m;
l.scrollBarX.wrapper.style.webkitTransitionDuration = d && l.options.fadeScrollbar ? "300ms" : "0"
}
if (l.scrollBarY) {
l.scrollBarY.bar.style.webkitTransitionDuration = m;
l.scrollBarY.wrapper.style.webkitTransitionDuration = d && l.options.fadeScrollbar ? "300ms" : "0"
}
},
touchStart: function (n) {
var m = this,
l;
if (!m.enabled) {
return
}
n.preventDefault();
n.stopPropagation();
m.scrolling = true;
m.moved = false;
m.distX = 0;
m.distY = 0;
m.setTransitionTime("0");
if (m.options.momentum || m.options.snap) {
l = new WebKitCSSMatrix(window.getComputedStyle(m.element).webkitTransform);
if (l.e != m.x || l.f != m.y) {
document.removeEventListener("webkitTransitionEnd", m, false);
m.setPosition(l.e, l.f);
m.moved = true
}
}
m.touchStartX = a ? n.changedTouches[0].pageX : n.pageX;
m.scrollStartX = m.x;
m.touchStartY = a ? n.changedTouches[0].pageY : n.pageY;
m.scrollStartY = m.y;
m.scrollStartTime = n.timeStamp;
m.directionX = 0;
m.directionY = 0
},
touchMove: function (r) {
if (!this.scrolling) {
return
}
var p = this,
o = a ? r.changedTouches[0].pageX : r.pageX,
n = a ? r.changedTouches[0].pageY : r.pageY,
m = p.scrollX ? o - p.touchStartX : 0,
l = p.scrollY ? n - p.touchStartY : 0,
s = p.x + m,
q = p.y + l;
r.stopPropagation();
p.touchStartX = o;
p.touchStartY = n;
if (s >= 0 || s < p.maxScrollX) {
s = p.options.bounce ? Math.round(p.x + m / 3) : (s >= 0 || p.maxScrollX >= 0) ? 0 : p.maxScrollX
}
if (q >= 0 || q < p.maxScrollY) {
q = p.options.bounce ? Math.round(p.y + l / 3) : (q >= 0 || p.maxScrollY >= 0) ? 0 : p.maxScrollY
}
if (p.distX + p.distY > 5) {
if (p.distX - 3 > p.distY) {
q = p.y;
l = 0
} else {
if (p.distY - 3 > p.distX) {
s = p.x;
m = 0
}
}
p.setPosition(s, q);
p.moved = true;
p.directionX = m > 0 ? -1 : 1;
p.directionY = l > 0 ? -1 : 1
} else {
p.distX += Math.abs(m);
p.distY += Math.abs(l)
}
},
touchEnd: function (t) {
if (!this.scrolling) {
return
}
var s = this,
o = t.timeStamp - s.scrollStartTime,
w = a ? t.changedTouches[0] : t,
u, v, n, l, m = 0,
r = s.x,
q = s.y,
p;
s.scrolling = false;
if (!s.moved) {
s.resetPosition();
if (a) {
u = w.target;
while (u.nodeType != 1) {
u = u.parentNode
}
v = document.createEvent("MouseEvents");
v.initMouseEvent("click", true, true, t.view, 1, w.screenX, w.screenY, w.clientX, w.clientY, t.ctrlKey, t.altKey, t.shiftKey, t.metaKey, 0, null);
v._fake = true;
u.dispatchEvent(v)
}
return
}
if (!s.options.snap && o > 250) {
s.resetPosition();
return
}
if (s.options.momentum) {
n = s.scrollX === true ? s.momentum(s.x - s.scrollStartX, o, s.options.bounce ? -s.x + s.scrollWidth / 5 : -s.x, s.options.bounce ? s.x + s.scrollerWidth - s.scrollWidth + s.scrollWidth / 5 : s.x + s.scrollerWidth - s.scrollWidth) : {
dist: 0,
time: 0
};
l = s.scrollY === true ? s.momentum(s.y - s.scrollStartY, o, s.options.bounce ? -s.y + s.scrollHeight / 5 : -s.y, s.options.bounce ? (s.maxScrollY < 0 ? s.y + s.scrollerHeight - s.scrollHeight : 0) + s.scrollHeight / 5 : s.y + s.scrollerHeight - s.scrollHeight) : {
dist: 0,
time: 0
};
m = Math.max(Math.max(n.time, l.time), 1);
r = s.x + n.dist;
q = s.y + l.dist
}
if (s.options.snap) {
p = s.snap(r, q);
r = p.x;
q = p.y;
m = Math.max(p.time, m)
}
s.scrollTo(r, q, m + "ms")
},
transitionEnd: function () {
var l = this;
document.removeEventListener("webkitTransitionEnd", l, false);
l.resetPosition()
},
resetPosition: function () {
var l = this,
n = l.x,
m = l.y;
if (l.x >= 0) {
n = 0
} else {
if (l.x < l.maxScrollX) {
n = l.maxScrollX
}
}
if (l.y >= 0 || l.maxScrollY > 0) {
m = 0
} else {
if (l.y < l.maxScrollY) {
m = l.maxScrollY
}
}
if (n != l.x || m != l.y) {
l.scrollTo(n, m)
} else {
if (l.moved) {
l.onScrollEnd();
l.moved = false
}
if (l.scrollBarX) {
l.scrollBarX.hide()
}
if (l.scrollBarY) {
l.scrollBarY.hide()
}
}
},
snap: function (l, o) {
var m = this,
n;
if (m.directionX > 0) {
l = Math.floor(l / m.scrollWidth)
} else {
if (m.directionX < 0) {
l = Math.ceil(l / m.scrollWidth)
} else {
l = Math.round(l / m.scrollWidth)
}
}
m.pageX = -l;
l = l * m.scrollWidth;
if (l > 0) {
l = m.pageX = 0
} else {
if (l < m.maxScrollX) {
m.pageX = m.maxPageX;
l = m.maxScrollX
}
}
if (m.directionY > 0) {
o = Math.floor(o / m.scrollHeight)
} else {
if (m.directionY < 0) {
o = Math.ceil(o / m.scrollHeight)
} else {
o = Math.round(o / m.scrollHeight)
}
}
m.pageY = -o;
o = o * m.scrollHeight;
if (o > 0) {
o = m.pageY = 0
} else {
if (o < m.maxScrollY) {
m.pageY = m.maxPageY;
o = m.maxScrollY
}
}
n = Math.round(Math.max(Math.abs(m.x - l) / m.scrollWidth * 500, Math.abs(m.y - o) / m.scrollHeight * 500));
return {
x: l,
y: o,
time: n
}
},
scrollTo: function (m, l, o) {
var n = this;
if (n.x == m && n.y == l) {
n.resetPosition();
return
}
n.moved = true;
n.setTransitionTime(o || "350ms");
n.setPosition(m, l);
if (o === "0" || o == "0s" || o == "0ms") {
n.resetPosition()
} else {
document.addEventListener("webkitTransitionEnd", n, false)
}
},
scrollToPage: function (n, m, p) {
var o = this,
l;
if (!o.options.snap) {
o.pageX = -Math.round(o.x / o.scrollWidth);
o.pageY = -Math.round(o.y / o.scrollHeight)
}
if (n == "next") {
n = ++o.pageX
} else {
if (n == "prev") {
n = --o.pageX
}
}
if (m == "next") {
m = ++o.pageY
} else {
if (m == "prev") {
m = --o.pageY
}
}
n = -n * o.scrollWidth;
m = -m * o.scrollHeight;
l = o.snap(n, m);
n = l.x;
m = l.y;
o.scrollTo(n, m, p || "500ms")
},
scrollToElement: function (m, o) {
m = typeof m == "object" ? m : this.element.querySelector(m);
if (!m) {
return
}
var n = this,
l = n.scrollX ? -m.offsetLeft : 0,
p = n.scrollY ? -m.offsetTop : 0;
if (l >= 0) {
l = 0
} else {
if (l < n.maxScrollX) {
l = n.maxScrollX
}
}
if (p >= 0) {
p = 0
} else {
if (p < n.maxScrollY) {
p = n.maxScrollY
}
}
n.scrollTo(l, p, o)
},
momentum: function (s, m, q, l) {
var p = 2.5,
r = 1.2,
n = Math.abs(s) / m * 1000,
o = n * n / p / 1000,
t = 0;
if (s > 0 && o > q) {
n = n * q / o / p;
o = q
} else {
if (s < 0 && o > l) {
n = n * l / o / p;
o = l
}
}
o = o * (s < 0 ? -1 : 1);
t = n / r;
return {
dist: Math.round(o),
time: Math.round(t)
}
},
destroy: function (l) {
var m = this;
window.removeEventListener("onorientationchange" in window ? "orientationchange" : "resize", m, false);
m.element.removeEventListener(f, m, false);
m.element.removeEventListener(i, m, false);
m.element.removeEventListener(e, m, false);
document.removeEventListener("webkitTransitionEnd", m, false);
if (m.options.checkDOMChanges) {
m.element.removeEventListener("DOMSubtreeModified", m, false)
}
if (m.scrollBarX) {
m.scrollBarX = m.scrollBarX.remove()
}
if (m.scrollBarY) {
m.scrollBarY = m.scrollBarY.remove()
}
if (l) {
m.wrapper.parentNode.removeChild(m.wrapper)
}
return null
}
};
function k(m, r, q, n, l) {
var o = this,
p = document;
o.dir = m;
o.fade = q;
o.shrink = n;
o.uid = ++c;
o.bar = p.createElement("div");
o.bar.style.cssText = "position:absolute;top:0;left:0;-webkit-transition-timing-function:cubic-bezier(0,0,0.25,1);pointer-events:none;-webkit-transition-duration:0;-webkit-transition-delay:0;-webkit-transition-property:-webkit-transform;z-index:10;background:" + l + ";-webkit-transform:" + h + "0,0" + b + ";" + (m == "horizontal" ? "-webkit-border-radius:3px 2px;min-width:6px;min-height:5px" : "-webkit-border-radius:2px 3px;min-width:5px;min-height:6px");
o.wrapper = p.createElement("div");
o.wrapper.style.cssText = "-webkit-mask:-webkit-canvas(scrollbar" + o.uid + o.dir + ");position:absolute;z-index:10;pointer-events:none;overflow:hidden;opacity:0;-webkit-transition-duration:" + (q ? "300ms" : "0") + ";-webkit-transition-delay:0;-webkit-transition-property:opacity;" + (o.dir == "horizontal" ? "bottom:2px;left:2px;right:7px;height:5px" : "top:2px;right:2px;bottom:7px;width:5px;");
o.wrapper.appendChild(o.bar);
r.appendChild(o.wrapper)
}
k.prototype = {
init: function (l, n) {
var o = this,
q = document,
p = Math.PI,
m;
if (o.dir == "horizontal") {
if (o.maxSize != o.wrapper.offsetWidth) {
o.maxSize = o.wrapper.offsetWidth;
m = q.getCSSCanvasContext("2d", "scrollbar" + o.uid + o.dir, o.maxSize, 5);
m.fillStyle = "rgb(0,0,0)";
m.beginPath();
m.arc(2.5, 2.5, 2.5, p / 2, -p / 2, false);
m.lineTo(o.maxSize - 2.5, 0);
m.arc(o.maxSize - 2.5, 2.5, 2.5, -p / 2, p / 2, false);
m.closePath();
m.fill()
}
} else {
if (o.maxSize != o.wrapper.offsetHeight) {
o.maxSize = o.wrapper.offsetHeight;
m = q.getCSSCanvasContext("2d", "scrollbar" + o.uid + o.dir, 5, o.maxSize);
m.fillStyle = "rgb(0,0,0)";
m.beginPath();
m.arc(2.5, 2.5, 2.5, p, 0, false);
m.lineTo(5, o.maxSize - 2.5);
m.arc(2.5, o.maxSize - 2.5, 2.5, 0, p, false);
m.closePath();
m.fill()
}
}
o.size = Math.max(Math.round(o.maxSize * o.maxSize / n), 6);
o.maxScroll = o.maxSize - o.size;
o.toWrapperProp = o.maxScroll / (l - n);
o.bar.style[o.dir == "horizontal" ? "width" : "height"] = o.size + "px"
},
setPosition: function (m) {
var l = this;
if (l.wrapper.style.opacity != "1") {
l.show()
}
m = Math.round(l.toWrapperProp * m);
if (m < 0) {
m = l.shrink ? m + m * 3 : 0;
if (l.size + m < 7) {
m = -l.size + 6
}
} else {
if (m > l.maxScroll) {
m = l.shrink ? m + (m - l.maxScroll) * 3 : l.maxScroll;
if (l.size + l.maxScroll - m < 7) {
m = l.size + l.maxScroll - 6
}
}
}
m = l.dir == "horizontal" ? h + m + "px,0" + b : h + "0," + m + "px" + b;
l.bar.style.webkitTransform = m
},
show: function () {
if (d) {
this.wrapper.style.webkitTransitionDelay = "0"
}
this.wrapper.style.opacity = "1"
},
hide: function () {
if (d) {
this.wrapper.style.webkitTransitionDelay = "350ms"
}
this.wrapper.style.opacity = "0"
},
remove: function () {
this.wrapper.parentNode.removeChild(this.wrapper);
return null
}
};
var d = ("WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix()),
g = (/iphone|ipad/gi).test(navigator.appVersion),
a = ("ontouchstart" in window),
f = a ? "touchstart" : "mousedown",
i = a ? "touchmove" : "mousemove",
e = a ? "touchend" : "mouseup",
h = "translate" + (d ? "3d(" : "("),
b = d ? ",0)" : ")",
c = 0;
window.iScroll = j
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment