You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2743 lines
77 KiB
2743 lines
77 KiB
(function(F) {
|
|
var G = false;
|
|
var H = false;
|
|
var I = false;
|
|
var J = 5000;
|
|
var K = 2000;
|
|
var $ = F;
|
|
function getScriptPath() {
|
|
var a = document.getElementsByTagName('script');
|
|
var b = a[a.length - 1].src.split('?')[0];
|
|
return (b.split('/').length > 0) ? b.split('/').slice(0, -1).join('/') + '/': ''
|
|
}
|
|
var L = getScriptPath();
|
|
var M = (function() {
|
|
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || false
|
|
})();
|
|
var N = (function() {
|
|
return window.cancelRequestAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || false
|
|
})();
|
|
var O = false;
|
|
var P = function() {
|
|
if (O) return O;
|
|
var c = document.createElement('DIV');
|
|
var d = {};
|
|
d.haspointerlock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document;
|
|
d.isopera = ("opera" in window);
|
|
d.isopera12 = (d.isopera && ("getUserMedia" in navigator));
|
|
d.isie = (("all" in document) && ("attachEvent" in c) && !d.isopera);
|
|
d.isieold = (d.isie && !("msInterpolationMode" in c.style));
|
|
d.isie7 = d.isie && !d.isieold && (!("documentMode" in document) || (document.documentMode == 7));
|
|
d.isie8 = d.isie && ("documentMode" in document) && (document.documentMode == 8);
|
|
d.isie9 = d.isie && ("performance" in window) && (document.documentMode >= 9);
|
|
d.isie10 = d.isie && ("performance" in window) && (document.documentMode >= 10);
|
|
d.isie9mobile = /iemobile.9/i.test(navigator.userAgent);
|
|
if (d.isie9mobile) d.isie9 = false;
|
|
d.isie7mobile = (!d.isie9mobile && d.isie7) && /iemobile/i.test(navigator.userAgent);
|
|
d.ismozilla = ("MozAppearance" in c.style);
|
|
d.iswebkit = ("WebkitAppearance" in c.style);
|
|
d.ischrome = ("chrome" in window);
|
|
d.ischrome22 = (d.ischrome && d.haspointerlock);
|
|
d.cantouch = ("ontouchstart" in document.documentElement) || ("ontouchstart" in window);
|
|
d.hasmstouch = (window.navigator.msPointerEnabled || false);
|
|
d.ismac = /^mac$/i.test(navigator.platform);
|
|
d.isios = (d.cantouch && /iphone|ipad|ipod/i.test(navigator.platform));
|
|
d.isios4 = ((d.isios) && !("seal" in Object));
|
|
d.isandroid = (/android/i.test(navigator.userAgent));
|
|
d.trstyle = false;
|
|
d.hastransform = false;
|
|
d.hastranslate3d = false;
|
|
d.transitionstyle = false;
|
|
d.hastransition = false;
|
|
d.transitionend = false;
|
|
var e = ['transform', 'msTransform', 'webkitTransform', 'MozTransform', 'OTransform'];
|
|
for (var a = 0; a < e.length; a++) {
|
|
if (typeof c.style[e[a]] != "undefined") {
|
|
d.trstyle = e[a];
|
|
break
|
|
}
|
|
}
|
|
d.hastransform = (d.trstyle != false);
|
|
if (d.hastransform) {
|
|
c.style[d.trstyle] = "translate3d(1px,2px,3px)";
|
|
d.hastranslate3d = /translate3d/.test(c.style[d.trstyle])
|
|
}
|
|
d.transitionstyle = false;
|
|
d.prefixstyle = '';
|
|
d.transitionend = false;
|
|
var e = ['transition', 'webkitTransition', 'MozTransition', 'OTransition', 'OTransition', 'msTransition', 'KhtmlTransition'];
|
|
var f = ['', '-webkit-', '-moz-', '-o-', '-o', '-ms-', '-khtml-'];
|
|
var g = ['transitionend', 'webkitTransitionEnd', 'transitionend', 'otransitionend', 'oTransitionEnd', 'msTransitionEnd', 'KhtmlTransitionEnd'];
|
|
for (var a = 0; a < e.length; a++) {
|
|
if (e[a] in c.style) {
|
|
d.transitionstyle = e[a];
|
|
d.prefixstyle = f[a];
|
|
d.transitionend = g[a];
|
|
break
|
|
}
|
|
}
|
|
d.hastransition = (d.transitionstyle);
|
|
function detectCursorGrab() {
|
|
var b = ['-moz-grab', '-webkit-grab', 'grab'];
|
|
if ((d.ischrome && !d.ischrome22) || d.isie) b = [];
|
|
for (var a = 0; a < b.length; a++) {
|
|
var p = b[a];
|
|
c.style['cursor'] = p;
|
|
if (c.style['cursor'] == p) return p
|
|
}
|
|
return 'url(http://www.google.com/intl/en_ALL/mapfiles/openhand.cur),n-resize'
|
|
}
|
|
d.cursorgrabvalue = detectCursorGrab();
|
|
d.hasmousecapture = ("setCapture" in c);
|
|
|
|
c = null;
|
|
O = d;
|
|
return d
|
|
};
|
|
var Q = function(A, B) {
|
|
var C = this;
|
|
this.version = '3.1.4';
|
|
this.name = 'nicescroll';
|
|
C.me = B;
|
|
this.opt = {
|
|
doc: $("body"),
|
|
win: false,
|
|
zindex: 0,
|
|
cursoropacitymin: 0,
|
|
cursoropacitymax: 1,
|
|
cursorcolor: "#424242",
|
|
cursorwidth: "5px",
|
|
cursorborder: "1px solid #fff",
|
|
cursorborderradius: "5px",
|
|
scrollspeed: 60,
|
|
mousescrollstep: 8 * 3,
|
|
touchbehavior: false,
|
|
hwacceleration: true,
|
|
usetransition: true,
|
|
boxzoom: false,
|
|
dblclickzoom: true,
|
|
gesturezoom: true,
|
|
grabcursorenabled: true,
|
|
autohidemode: true,
|
|
background: "",
|
|
iframeautoresize: true,
|
|
cursorminheight: 32,
|
|
preservenativescrolling: true,
|
|
railoffset: false,
|
|
bouncescroll: true,
|
|
spacebarenabled: true,
|
|
railpadding: {
|
|
top: 0,
|
|
right: 0,
|
|
left: 0,
|
|
bottom: 0
|
|
},
|
|
disableoutline: true,
|
|
horizrailenabled: true,
|
|
railalign: "right",
|
|
railvalign: "bottom",
|
|
enabletranslate3d: true,
|
|
enablemousewheel: true,
|
|
enablekeyboard: true,
|
|
smoothscroll: true,
|
|
sensitiverail: true,
|
|
enablemouselockapi: true,
|
|
cursorfixedheight: false
|
|
};
|
|
this.opt.snapbackspeed = 80;
|
|
if (A || false) {
|
|
for (var a in C.opt) {
|
|
if (typeof A[a] != "undefined") C.opt[a] = A[a]
|
|
}
|
|
}
|
|
this.doc = C.opt.doc;
|
|
this.iddoc = (this.doc && this.doc[0]) ? this.doc[0].id || '': '';
|
|
this.ispage = /BODY|HTML/.test((C.opt.win) ? C.opt.win[0].nodeName: this.doc[0].nodeName);
|
|
this.haswrapper = (C.opt.win !== false);
|
|
this.win = C.opt.win || (this.ispage ? $(window) : this.doc);
|
|
this.docscroll = (this.ispage && !this.haswrapper) ? $(window) : this.win;
|
|
this.body = $("body");
|
|
this.viewport = false;
|
|
this.isfixed = false;
|
|
this.iframe = false;
|
|
this.isiframe = ((this.doc[0].nodeName == 'IFRAME') && (this.win[0].nodeName == 'IFRAME'));
|
|
this.istextarea = (this.win[0].nodeName == 'TEXTAREA');
|
|
this.forcescreen = false;
|
|
this.canshowonmouseevent = (C.opt.autohidemode != "scroll");
|
|
this.onmousedown = false;
|
|
this.onmouseup = false;
|
|
this.onmousemove = false;
|
|
this.onmousewheel = false;
|
|
this.onkeypress = false;
|
|
this.ongesturezoom = false;
|
|
this.onclick = false;
|
|
this.onscrollstart = false;
|
|
this.onscrollend = false;
|
|
this.onscrollcancel = false;
|
|
this.onzoomin = false;
|
|
this.onzoomout = false;
|
|
this.view = false;
|
|
this.page = false;
|
|
this.scroll = {
|
|
x: 0,
|
|
y: 0
|
|
};
|
|
this.scrollratio = {
|
|
x: 0,
|
|
y: 0
|
|
};
|
|
this.cursorheight = 20;
|
|
this.scrollvaluemax = 0;
|
|
this.scrollrunning = false;
|
|
this.scrollmom = false;
|
|
this.observer = false;
|
|
do {
|
|
this.id = "ascrail" + (K++)
|
|
} while ( document . getElementById ( this . id ));
|
|
this.rail = false;
|
|
this.cursor = false;
|
|
this.cursorfreezed = false;
|
|
this.zoom = false;
|
|
this.zoomactive = false;
|
|
this.hasfocus = false;
|
|
this.hasmousefocus = false;
|
|
this.visibility = true;
|
|
this.locked = false;
|
|
this.hidden = false;
|
|
this.cursoractive = true;
|
|
this.nativescrollingarea = false;
|
|
this.events = [];
|
|
this.saved = {};
|
|
this.delaylist = {};
|
|
this.synclist = {};
|
|
this.lastdeltax = 0;
|
|
this.lastdeltay = 0;
|
|
this.detected = P();
|
|
var D = $.extend({},
|
|
this.detected);
|
|
this.canhwscroll = (D.hastransform && C.opt.hwacceleration);
|
|
this.ishwscroll = (this.canhwscroll && C.haswrapper);
|
|
this.istouchcapable = false;
|
|
if (D.cantouch && D.ischrome && !D.isios && !D.isandroid) {
|
|
this.istouchcapable = true;
|
|
D.cantouch = false
|
|
}
|
|
if (D.cantouch && D.ismozilla && !D.isios) {
|
|
this.istouchcapable = true;
|
|
D.cantouch = false
|
|
}
|
|
if (!C.opt.enablemouselockapi) {
|
|
D.hasmousecapture = false;
|
|
D.haspointerlock = false
|
|
}
|
|
this.delayed = function(a, b, c, d) {
|
|
var e = C.delaylist[a];
|
|
var f = (new Date()).getTime();
|
|
if (!d && e && e.tt) return false;
|
|
if (e && e.tt) clearTimeout(e.tt);
|
|
if (e && e.last + c > f && !e.tt) {
|
|
C.delaylist[a] = {
|
|
last: f + c,
|
|
tt: setTimeout(function() {
|
|
C.delaylist[a].tt = 0;
|
|
b.call()
|
|
},
|
|
c)
|
|
}
|
|
} else if (!e || !e.tt) {
|
|
C.delaylist[a] = {
|
|
last: f,
|
|
tt: 0
|
|
};
|
|
setTimeout(function() {
|
|
b.call()
|
|
},
|
|
0)
|
|
}
|
|
};
|
|
this.synched = function(b, c) {
|
|
function requestSync() {
|
|
if (C.onsync) return;
|
|
M(function() {
|
|
C.onsync = false;
|
|
for (b in C.synclist) {
|
|
var a = C.synclist[b];
|
|
if (a) a.call(C);
|
|
C.synclist[b] = false
|
|
}
|
|
});
|
|
C.onsync = true
|
|
};
|
|
C.synclist[b] = c;
|
|
requestSync();
|
|
return b
|
|
};
|
|
this.unsynched = function(a) {
|
|
if (C.synclist[a]) C.synclist[a] = false
|
|
};
|
|
this.css = function(a, b) {
|
|
for (var n in b) {
|
|
C.saved.css.push([a, n, a.css(n)]);
|
|
a.css(n, b[n])
|
|
}
|
|
};
|
|
this.scrollTop = function(a) {
|
|
return (typeof a == "undefined") ? C.getScrollTop() : C.setScrollTop(a)
|
|
};
|
|
this.scrollLeft = function(a) {
|
|
return (typeof a == "undefined") ? C.getScrollLeft() : C.setScrollLeft(a)
|
|
};
|
|
BezierClass = function(a, b, c, d, e, f, g) {
|
|
this.st = a;
|
|
this.ed = b;
|
|
this.spd = c;
|
|
this.p1 = d || 0;
|
|
this.p2 = e || 1;
|
|
this.p3 = f || 0;
|
|
this.p4 = g || 1;
|
|
this.ts = (new Date()).getTime();
|
|
this.df = this.ed - this.st
|
|
};
|
|
BezierClass.prototype = {
|
|
B2: function(t) {
|
|
return 3 * t * t * (1 - t)
|
|
},
|
|
B3: function(t) {
|
|
return 3 * t * (1 - t) * (1 - t)
|
|
},
|
|
B4: function(t) {
|
|
return (1 - t) * (1 - t) * (1 - t)
|
|
},
|
|
getNow: function() {
|
|
var a = (new Date()).getTime();
|
|
var b = 1 - ((a - this.ts) / this.spd);
|
|
var c = this.B2(b) + this.B3(b) + this.B4(b);
|
|
return (b < 0) ? this.ed: this.st + Math.round(this.df * c)
|
|
},
|
|
update: function(a, b) {
|
|
this.st = this.getNow();
|
|
this.ed = a;
|
|
this.spd = b;
|
|
this.ts = (new Date()).getTime();
|
|
this.df = this.ed - this.st;
|
|
return this
|
|
}
|
|
};
|
|
if (this.ishwscroll) {
|
|
this.doc.translate = {
|
|
x: 0,
|
|
y: 0,
|
|
tx: "0px",
|
|
ty: "0px"
|
|
};
|
|
if (D.hastranslate3d && D.isios) this.doc.css("-webkit-backface-visibility", "hidden");
|
|
function getMatrixValues() {
|
|
var a = C.doc.css(D.trstyle);
|
|
if (a && (a.substr(0, 6) == "matrix")) {
|
|
return a.replace(/^.*\((.*)\)$/g, "$1").replace(/px/g, '').split(/, +/)
|
|
}
|
|
return false
|
|
}
|
|
this.getScrollTop = function(a) {
|
|
if (!a) {
|
|
var b = getMatrixValues();
|
|
if (b) return (b.length == 16) ? -b[13] : -b[5];
|
|
if (C.timerscroll && C.timerscroll.bz) return C.timerscroll.bz.getNow()
|
|
}
|
|
return C.doc.translate.y
|
|
};
|
|
this.getScrollLeft = function(a) {
|
|
if (!a) {
|
|
var b = getMatrixValues();
|
|
if (b) return (b.length == 16) ? -b[12] : -b[4];
|
|
if (C.timerscroll && C.timerscroll.bh) return C.timerscroll.bh.getNow()
|
|
}
|
|
return C.doc.translate.x
|
|
};
|
|
if (document.createEvent) {
|
|
this.notifyScrollEvent = function(a) {
|
|
var e = document.createEvent("UIEvents");
|
|
e.initUIEvent("scroll", false, true, window, 1);
|
|
a.dispatchEvent(e)
|
|
}
|
|
} else if (document.fireEvent) {
|
|
this.notifyScrollEvent = function(a) {
|
|
var e = document.createEventObject();
|
|
a.fireEvent("onscroll");
|
|
e.cancelBubble = true
|
|
}
|
|
} else {
|
|
this.notifyScrollEvent = function(a, b) {}
|
|
}
|
|
if (D.hastranslate3d && C.opt.enabletranslate3d) {
|
|
this.setScrollTop = function(a, b) {
|
|
C.doc.translate.y = a;
|
|
C.doc.translate.ty = (a * -1) + "px";
|
|
C.doc.css(D.trstyle, "translate3d(" + C.doc.translate.tx + "," + C.doc.translate.ty + ",0px)");
|
|
if (!b) C.notifyScrollEvent(C.win[0])
|
|
};
|
|
this.setScrollLeft = function(a, b) {
|
|
C.doc.translate.x = a;
|
|
C.doc.translate.tx = (a * -1) + "px";
|
|
C.doc.css(D.trstyle, "translate3d(" + C.doc.translate.tx + "," + C.doc.translate.ty + ",0px)");
|
|
if (!b) C.notifyScrollEvent(C.win[0])
|
|
}
|
|
} else {
|
|
this.setScrollTop = function(a, b) {
|
|
C.doc.translate.y = a;
|
|
C.doc.translate.ty = (a * -1) + "px";
|
|
C.doc.css(D.trstyle, "translate(" + C.doc.translate.tx + "," + C.doc.translate.ty + ")");
|
|
if (!b) C.notifyScrollEvent(C.win[0])
|
|
};
|
|
this.setScrollLeft = function(a, b) {
|
|
C.doc.translate.x = a;
|
|
C.doc.translate.tx = (a * -1) + "px";
|
|
C.doc.css(D.trstyle, "translate(" + C.doc.translate.tx + "," + C.doc.translate.ty + ")");
|
|
if (!b) C.notifyScrollEvent(C.win[0])
|
|
}
|
|
}
|
|
} else {
|
|
this.getScrollTop = function() {
|
|
return C.docscroll.scrollTop()
|
|
};
|
|
this.setScrollTop = function(a) {
|
|
return C.docscroll.scrollTop(a)
|
|
};
|
|
this.getScrollLeft = function() {
|
|
return C.docscroll.scrollLeft()
|
|
};
|
|
this.setScrollLeft = function(a) {
|
|
return C.docscroll.scrollLeft(a)
|
|
}
|
|
}
|
|
this.getTarget = function(e) {
|
|
if (!e) return false;
|
|
if (e.target) return e.target;
|
|
if (e.srcElement) return e.srcElement;
|
|
return false
|
|
};
|
|
this.hasParent = function(e, a) {
|
|
if (!e) return false;
|
|
var b = e.target || e.srcElement || e || false;
|
|
while (b && b.id != a) {
|
|
b = b.parentNode || false
|
|
}
|
|
return (b !== false)
|
|
};
|
|
var E = {
|
|
"thin": 1,
|
|
"medium": 3,
|
|
"thick": 5
|
|
};
|
|
function getWidthToPixel(a, b, c) {
|
|
var d = a.css(b);
|
|
var e = parseFloat(d);
|
|
if (isNaN(e)) {
|
|
e = E[d] || 0;
|
|
var f = (e == 3) ? ((c) ? (C.win.outerHeight() - C.win.innerHeight()) : (C.win.outerWidth() - C.win.innerWidth())) : 1;
|
|
if (C.isie8 && e) e += 1;
|
|
return (f) ? e: 0
|
|
}
|
|
return e
|
|
};
|
|
this.getOffset = function() {
|
|
if (C.isfixed) return {
|
|
top: parseFloat(C.win.css('top')),
|
|
left: parseFloat(C.win.css('left'))
|
|
};
|
|
if (!C.viewport) return C.win.offset();
|
|
var a = C.win.offset();
|
|
var b = C.viewport.offset();
|
|
return {
|
|
top: a.top - b.top + C.viewport.scrollTop(),
|
|
left: a.left - b.left + C.viewport.scrollLeft()
|
|
}
|
|
};
|
|
this.updateScrollBar = function(a) {
|
|
if (C.ishwscroll) {
|
|
C.rail.css({
|
|
height: C.win.innerHeight()
|
|
});
|
|
if (C.railh) C.railh.css({
|
|
width: C.win.innerWidth()
|
|
})
|
|
} else {
|
|
var b = C.getOffset();
|
|
var c = {
|
|
top: b.top,
|
|
left: b.left
|
|
};
|
|
c.top += getWidthToPixel(C.win, 'border-top-width', true);
|
|
var d = (C.win.outerWidth() - C.win.innerWidth()) / 2;
|
|
c.left += (C.rail.align) ? C.win.outerWidth() - getWidthToPixel(C.win, 'border-right-width') - C.rail.width: getWidthToPixel(C.win, 'border-left-width');
|
|
var e = C.opt.railoffset;
|
|
if (e) {
|
|
if (e.top) c.top += e.top;
|
|
if (C.rail.align && e.left) c.left += e.left
|
|
}
|
|
if (!C.locked) C.rail.css({
|
|
top: c.top,
|
|
left: c.left,
|
|
height: (a) ? a.h: C.win.innerHeight()
|
|
});
|
|
if (C.zoom) {
|
|
C.zoom.css({
|
|
top: c.top + 1,
|
|
left: (C.rail.align == 1) ? c.left - 20 : c.left + C.rail.width + 4
|
|
})
|
|
}
|
|
if (C.railh && !C.locked) {
|
|
var c = {
|
|
top: b.top,
|
|
left: b.left
|
|
};
|
|
var y = (C.railh.align) ? c.top + getWidthToPixel(C.win, 'border-top-width', true) + C.win.innerHeight() - C.railh.height: c.top + getWidthToPixel(C.win, 'border-top-width', true);
|
|
var x = c.left + getWidthToPixel(C.win, 'border-left-width');
|
|
C.railh.css({
|
|
top: y,
|
|
left: x,
|
|
width: C.railh.width
|
|
})
|
|
}
|
|
}
|
|
};
|
|
this.doRailClick = function(e, a, b) {
|
|
var c, pg, cur, pos;
|
|
if (C.rail.drag && C.rail.drag.pt != 1) return;
|
|
if (C.locked) return;
|
|
if (C.rail.drag) return;
|
|
C.cancelScroll();
|
|
C.cancelEvent(e);
|
|
if (a) {
|
|
c = (b) ? C.doScrollLeft: C.doScrollTop;
|
|
cur = (b) ? ((e.pageX - C.railh.offset().left - (C.cursorwidth / 2)) * C.scrollratio.x) : ((e.pageY - C.rail.offset().top - (C.cursorheight / 2)) * C.scrollratio.y);
|
|
c(cur)
|
|
} else {
|
|
c = (b) ? C.doScrollLeftBy: C.doScrollBy;
|
|
cur = (b) ? C.scroll.x: C.scroll.y;
|
|
pos = (b) ? e.pageX - C.railh.offset().left: e.pageY - C.rail.offset().top;
|
|
pg = (b) ? C.view.w: C.view.h; (cur >= pos) ? c(pg) : c( - pg)
|
|
}
|
|
};
|
|
C.hasanimationframe = (M);
|
|
C.hascancelanimationframe = (N);
|
|
if (!C.hasanimationframe) {
|
|
M = function(a) {
|
|
return setTimeout(a, 16)
|
|
};
|
|
N = clearInterval
|
|
} else if (!C.hascancelanimationframe) N = function() {
|
|
C.cancelAnimationFrame = true
|
|
};
|
|
this.init = function() {
|
|
C.saved.css = [];
|
|
if (D.isie7mobile) return true;
|
|
if (D.hasmstouch) C.css((C.ispage) ? $("html") : C.win, {
|
|
'-ms-touch-action': 'none'
|
|
});
|
|
if (!C.ispage || (!D.cantouch && !D.isieold && !D.isie9mobile)) {
|
|
var m = C.docscroll;
|
|
if (C.ispage) m = (C.haswrapper) ? C.win: C.doc;
|
|
if (!D.isie9mobile) C.css(m, {
|
|
'overflow-y': 'hidden'
|
|
});
|
|
if (C.ispage && D.isie7) {
|
|
if (C.doc[0].nodeName == 'BODY') C.css($("html"), {
|
|
'overflow-y': 'hidden'
|
|
});
|
|
else if (C.doc[0].nodeName == 'HTML') C.css($("body"), {
|
|
'overflow-y': 'hidden'
|
|
})
|
|
}
|
|
if (D.isios && !C.ispage && !C.haswrapper) C.css($("body"), {
|
|
"-webkit-overflow-scrolling": "touch"
|
|
});
|
|
var o = $(document.createElement('div'));
|
|
o.css({
|
|
position: "relative",
|
|
top: 0,
|
|
"float": "right",
|
|
width: C.opt.cursorwidth,
|
|
height: "0px",
|
|
'background-color': C.opt.cursorcolor,
|
|
border: C.opt.cursorborder,
|
|
'background-clip': 'padding-box',
|
|
'-webkit-border-radius': C.opt.cursorborderradius,
|
|
'-moz-border-radius': C.opt.cursorborderradius,
|
|
'border-radius': C.opt.cursorborderradius
|
|
});
|
|
o.hborder = parseFloat(o.outerHeight() - o.innerHeight());
|
|
C.cursor = o;
|
|
var p = $(document.createElement('div'));
|
|
p.attr('id', C.id);
|
|
var v, a, kp = ["left", "right"];
|
|
for (var n in kp) {
|
|
a = kp[n];
|
|
v = C.opt.railpadding[a]; (v) ? p.css("padding-" + a, v + "px") : C.opt.railpadding[a] = 0
|
|
}
|
|
p.append(o);
|
|
p.width = Math.max(parseFloat(C.opt.cursorwidth), o.outerWidth()) + C.opt.railpadding['left'] + C.opt.railpadding['right'];
|
|
p.css({
|
|
width: p.width + "px",
|
|
//'zIndex': (C.ispage) ? C.opt.zindex: C.opt.zindex + 2,
|
|
"background": C.opt.background
|
|
});
|
|
p.visibility = true;
|
|
p.scrollable = true;
|
|
p.align = (C.opt.railalign == "left") ? 0 : 1;
|
|
C.rail = p;
|
|
C.rail.drag = false;
|
|
var q = false;
|
|
if (C.opt.boxzoom && !C.ispage && !D.isieold) {
|
|
q = document.createElement('div');
|
|
C.bind(q, "click", C.doZoom);
|
|
C.zoom = $(q);
|
|
C.zoom.css({
|
|
"cursor": "pointer",
|
|
//'z-index': C.opt.zindex,
|
|
'backgroundImage': 'url(' + L + 'zoomico_wev8.png)',
|
|
'height': 18,
|
|
'width': 18,
|
|
'backgroundPosition': '0px 0px'
|
|
});
|
|
if (C.opt.dblclickzoom) C.bind(C.win, "dblclick", C.doZoom);
|
|
if (D.cantouch && C.opt.gesturezoom) {
|
|
C.ongesturezoom = function(e) {
|
|
if (e.scale > 1.5) C.doZoomIn(e);
|
|
if (e.scale < 0.8) C.doZoomOut(e);
|
|
return C.cancelEvent(e)
|
|
};
|
|
C.bind(C.win, "gestureend", C.ongesturezoom)
|
|
}
|
|
};
|
|
C.railh = false;
|
|
if (C.opt.horizrailenabled) {
|
|
C.css(m, {
|
|
'overflow-x': 'hidden'
|
|
});
|
|
var o = $(document.createElement('div'));
|
|
o.css({
|
|
position: "relative",
|
|
top: 0,
|
|
height: C.opt.cursorwidth,
|
|
width: "0px",
|
|
'background-color': C.opt.cursorcolor,
|
|
border: C.opt.cursorborder,
|
|
'background-clip': 'padding-box',
|
|
'-webkit-border-radius': C.opt.cursorborderradius,
|
|
'-moz-border-radius': C.opt.cursorborderradius,
|
|
'border-radius': C.opt.cursorborderradius
|
|
});
|
|
o.wborder = parseFloat(o.outerWidth() - o.innerWidth());
|
|
C.cursorh = o;
|
|
var r = $(document.createElement('div'));
|
|
r.attr('id', C.id + '-hr');
|
|
r.height = 1 + Math.max(parseFloat(C.opt.cursorwidth), o.outerHeight());
|
|
r.css({
|
|
height: r.height + "px",
|
|
//'zIndex': (C.ispage) ? C.opt.zindex: C.opt.zindex + 2,
|
|
"background": C.opt.background
|
|
});
|
|
r.append(o);
|
|
r.visibility = true;
|
|
r.scrollable = true;
|
|
r.align = (C.opt.railvalign == "top") ? 0 : 1;
|
|
C.railh = r;
|
|
C.railh.drag = false
|
|
}
|
|
if (C.ispage) {
|
|
p.css({
|
|
position: "fixed",
|
|
top: "0px",
|
|
height: "100%"
|
|
}); (p.align) ? p.css({
|
|
right: "0px"
|
|
}) : p.css({
|
|
left: "0px"
|
|
});
|
|
C.body.append(p);
|
|
if (C.railh) {
|
|
r.css({
|
|
position: "fixed",
|
|
left: "0px",
|
|
width: "100%"
|
|
}); (r.align) ? r.css({
|
|
bottom: "0px"
|
|
}) : r.css({
|
|
top: "0px"
|
|
});
|
|
C.body.append(r)
|
|
}
|
|
} else {
|
|
if (C.ishwscroll) {
|
|
if (C.win.css('position') == 'static') C.css(C.win, {
|
|
'position': 'relative'
|
|
});
|
|
var s = (C.win[0].nodeName == 'HTML') ? C.body: C.win;
|
|
if (C.zoom) {
|
|
C.zoom.css({
|
|
position: "absolute",
|
|
top: 1,
|
|
right: 0,
|
|
"margin-right": p.width + 4
|
|
});
|
|
s.append(C.zoom)
|
|
}
|
|
p.css({
|
|
position: "absolute",
|
|
top: 0
|
|
}); (p.align) ? p.css({
|
|
right: 0
|
|
}) : p.css({
|
|
left: 0
|
|
});
|
|
s.append(p);
|
|
if (r) {
|
|
r.css({
|
|
position: "absolute",
|
|
left: 0,
|
|
bottom: 0
|
|
}); (r.align) ? r.css({
|
|
bottom: 0
|
|
}) : r.css({
|
|
top: 0
|
|
});
|
|
s.append(r)
|
|
}
|
|
} else {
|
|
C.isfixed = (C.win.css("position") == "fixed");
|
|
var t = (C.isfixed) ? "fixed": "absolute";
|
|
if (!C.isfixed) C.viewport = C.getViewport(C.win[0]);
|
|
if (C.viewport) C.body = C.viewport;
|
|
p.css({
|
|
position: t
|
|
});
|
|
if (C.zoom) C.zoom.css({
|
|
position: t
|
|
});
|
|
C.updateScrollBar();
|
|
C.body.append(p);
|
|
if (C.zoom) C.body.append(C.zoom);
|
|
if (C.railh) {
|
|
r.css({
|
|
position: t
|
|
});
|
|
C.body.append(r)
|
|
}
|
|
}
|
|
if (D.isios) C.css(C.win, {
|
|
'-webkit-tap-highlight-color': 'rgba(0,0,0,0)',
|
|
'-webkit-touch-callout': 'none'
|
|
});
|
|
if (D.isie && C.opt.disableoutline) C.win.attr("hideFocus", "true");
|
|
if (D.iswebkit && C.opt.disableoutline) C.win.css({
|
|
"outline": "none"
|
|
})
|
|
}
|
|
if (C.opt.autohidemode === false) {
|
|
C.autohidedom = false;
|
|
C.rail.css({
|
|
opacity: C.opt.cursoropacitymax
|
|
});
|
|
if (C.railh) C.railh.css({
|
|
opacity: C.opt.cursoropacitymax
|
|
})
|
|
} else if (C.opt.autohidemode === true) {
|
|
C.autohidedom = $().add(C.rail);
|
|
if (C.railh) C.autohidedom = C.autohidedom.add(C.railh)
|
|
} else if (C.opt.autohidemode == "scroll") {
|
|
C.autohidedom = $().add(C.rail);
|
|
if (C.railh) C.autohidedom = C.autohidedom.add(C.railh)
|
|
} else if (C.opt.autohidemode == "cursor") {
|
|
C.autohidedom = $().add(C.cursor);
|
|
if (C.railh) C.autohidedom = C.autohidedom.add(C.railh.cursor)
|
|
} else if (C.opt.autohidemode == "hidden") {
|
|
C.autohidedom = false;
|
|
C.hide();
|
|
C.locked = false
|
|
}
|
|
if (D.isie9mobile) {
|
|
C.scrollmom = new R(C);
|
|
C.onmangotouch = function(e) {
|
|
var a = C.getScrollTop();
|
|
var b = C.getScrollLeft();
|
|
if ((a == C.scrollmom.lastscrolly) && (b == C.scrollmom.lastscrollx)) return true;
|
|
var c = a - C.mangotouch.sy;
|
|
var d = b - C.mangotouch.sx;
|
|
var f = Math.round(Math.sqrt(Math.pow(d, 2) + Math.pow(c, 2)));
|
|
if (f == 0) return;
|
|
var g = (c < 0) ? -1 : 1;
|
|
var h = (d < 0) ? -1 : 1;
|
|
var i = +new Date();
|
|
if (C.mangotouch.lazy) clearTimeout(C.mangotouch.lazy);
|
|
if (((i - C.mangotouch.tm) > 80) || (C.mangotouch.dry != g) || (C.mangotouch.drx != h)) {
|
|
C.scrollmom.stop();
|
|
C.scrollmom.reset(b, a);
|
|
C.mangotouch.sy = a;
|
|
C.mangotouch.ly = a;
|
|
C.mangotouch.sx = b;
|
|
C.mangotouch.lx = b;
|
|
C.mangotouch.dry = g;
|
|
C.mangotouch.drx = h;
|
|
C.mangotouch.tm = i
|
|
} else {
|
|
C.scrollmom.stop();
|
|
C.scrollmom.update(C.mangotouch.sx - d, C.mangotouch.sy - c);
|
|
var j = i - C.mangotouch.tm;
|
|
C.mangotouch.tm = i;
|
|
var k = Math.max(Math.abs(C.mangotouch.ly - a), Math.abs(C.mangotouch.lx - b));
|
|
C.mangotouch.ly = a;
|
|
C.mangotouch.lx = b;
|
|
if (k > 2) {
|
|
C.mangotouch.lazy = setTimeout(function() {
|
|
C.mangotouch.lazy = false;
|
|
C.mangotouch.dry = 0;
|
|
C.mangotouch.drx = 0;
|
|
C.mangotouch.tm = 0;
|
|
C.scrollmom.doMomentum(30)
|
|
},
|
|
100)
|
|
}
|
|
}
|
|
};
|
|
var u = C.getScrollTop();
|
|
var w = C.getScrollLeft();
|
|
C.mangotouch = {
|
|
sy: u,
|
|
ly: u,
|
|
dry: 0,
|
|
sx: w,
|
|
lx: w,
|
|
drx: 0,
|
|
lazy: false,
|
|
tm: 0
|
|
};
|
|
C.bind(C.docscroll, "scroll", C.onmangotouch)
|
|
} else {
|
|
if (D.cantouch || C.istouchcapable || C.opt.touchbehavior || D.hasmstouch) {
|
|
C.scrollmom = new R(C);
|
|
C.ontouchstart = function(e) {
|
|
if (e.pointerType && e.pointerType != 2) return false;
|
|
if (!C.locked) {
|
|
if (D.hasmstouch) {
|
|
var a = (e.target) ? e.target: false;
|
|
while (a) {
|
|
var b = $(a).getNiceScroll();
|
|
if ((b.length > 0) && (b[0].me == C.me)) break;
|
|
if (b.length > 0) return false;
|
|
if ((a.nodeName == 'DIV') && (a.id == C.id)) break;
|
|
a = (a.parentNode) ? a.parentNode: false
|
|
}
|
|
}
|
|
C.cancelScroll();
|
|
var a = C.getTarget(e);
|
|
if (a) {
|
|
var c = (/INPUT/i.test(a.nodeName)) && (/range/i.test(a.type));
|
|
if (c) return C.stopPropagation(e)
|
|
}
|
|
if (! ("clientX" in e) && ("changedTouches" in e)) {
|
|
e.clientX = e.changedTouches[0].clientX;
|
|
e.clientY = e.changedTouches[0].clientY
|
|
}
|
|
if (C.forcescreen) {
|
|
var d = e;
|
|
var e = {
|
|
"original": (e.original) ? e.original: e
|
|
};
|
|
e.clientX = d.screenX;
|
|
e.clientY = d.screenY
|
|
}
|
|
C.rail.drag = {
|
|
x: e.clientX,
|
|
y: e.clientY,
|
|
sx: C.scroll.x,
|
|
sy: C.scroll.y,
|
|
st: C.getScrollTop(),
|
|
sl: C.getScrollLeft(),
|
|
pt: 2
|
|
};
|
|
if (C.opt.touchbehavior && C.isiframe && D.isie) {
|
|
var f = C.win.position();
|
|
C.rail.drag.x += f.left;
|
|
C.rail.drag.y += f.top
|
|
}
|
|
C.hasmoving = false;
|
|
C.lastmouseup = false;
|
|
C.scrollmom.reset(e.clientX, e.clientY);
|
|
if (!D.cantouch && !this.istouchcapable && !D.hasmstouch) {
|
|
var g = (a) ? /INPUT|SELECT|TEXTAREA/i.test(a.nodeName) : false;
|
|
if (!g) {
|
|
if (!C.ispage && D.hasmousecapture) a.setCapture();
|
|
return C.cancelEvent(e)
|
|
}
|
|
if (/SUBMIT|CANCEL|BUTTON/i.test($(a).attr('type'))) {
|
|
pc = {
|
|
"tg": a,
|
|
"click": false
|
|
};
|
|
C.preventclick = pc
|
|
}
|
|
}
|
|
}
|
|
};
|
|
C.ontouchend = function(e) {
|
|
if (e.pointerType && e.pointerType != 2) return false;
|
|
if (C.rail.drag && (C.rail.drag.pt == 2)) {
|
|
C.scrollmom.doMomentum();
|
|
C.rail.drag = false;
|
|
if (C.hasmoving) {
|
|
C.hasmoving = false;
|
|
C.lastmouseup = true;
|
|
C.hideCursor();
|
|
if (D.hasmousecapture) document.releaseCapture();
|
|
if (!D.cantouch) return C.cancelEvent(e)
|
|
}
|
|
}
|
|
};
|
|
var x = (C.opt.touchbehavior && C.isiframe && !D.hasmousecapture);
|
|
C.ontouchmove = function(e, a) {
|
|
if (e.pointerType && e.pointerType != 2) return false;
|
|
if (C.rail.drag && (C.rail.drag.pt == 2)) {
|
|
if (D.cantouch && (typeof e.original == "undefined")) return true;
|
|
C.hasmoving = true;
|
|
if (C.preventclick && !C.preventclick.click) {
|
|
C.preventclick.click = C.preventclick.tg.onclick || false;
|
|
C.preventclick.tg.onclick = C.onpreventclick
|
|
}
|
|
var b = $.extend({
|
|
"original": e
|
|
},
|
|
e);
|
|
e = b;
|
|
if (("changedTouches" in e)) {
|
|
e.clientX = e.changedTouches[0].clientX;
|
|
e.clientY = e.changedTouches[0].clientY
|
|
}
|
|
if (C.forcescreen) {
|
|
var c = e;
|
|
var e = {
|
|
"original": (e.original) ? e.original: e
|
|
};
|
|
e.clientX = c.screenX;
|
|
e.clientY = c.screenY
|
|
}
|
|
var d = ofy = 0;
|
|
if (x && !a) {
|
|
var f = C.win.position();
|
|
d = -f.left;
|
|
ofy = -f.top
|
|
}
|
|
var g = e.clientY + ofy;
|
|
var h = (g - C.rail.drag.y);
|
|
var i = C.rail.drag.st - h;
|
|
if (C.ishwscroll && C.opt.bouncescroll) {
|
|
if (i < 0) {
|
|
i = Math.round(i / 2)
|
|
} else if (i > C.page.maxh) {
|
|
i = C.page.maxh + Math.round((i - C.page.maxh) / 2)
|
|
}
|
|
} else {
|
|
if (i < 0) {
|
|
i = 0;
|
|
g = 0
|
|
}
|
|
if (i > C.page.maxh) {
|
|
i = C.page.maxh;
|
|
g = 0
|
|
}
|
|
}
|
|
var j = e.clientX + d;
|
|
if (C.railh && C.railh.scrollable) {
|
|
var k = (j - C.rail.drag.x);
|
|
var l = C.rail.drag.sl - k;
|
|
if (C.ishwscroll && C.opt.bouncescroll) {
|
|
if (l < 0) {
|
|
l = Math.round(l / 2)
|
|
} else if (l > C.page.maxw) {
|
|
l = C.page.maxw + Math.round((l - C.page.maxw) / 2)
|
|
}
|
|
} else {
|
|
if (l < 0) {
|
|
l = 0;
|
|
j = 0
|
|
}
|
|
if (l > C.page.maxw) {
|
|
l = C.page.maxw;
|
|
j = 0
|
|
}
|
|
}
|
|
}
|
|
C.synched("touchmove",
|
|
function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.rail.drag && (C.rail.drag.pt == 2)) {
|
|
if (C.prepareTransition) C.prepareTransition(0);
|
|
if (C.rail.scrollable) C.setScrollTop(i);
|
|
C.scrollmom.update(j, g);
|
|
if (C.railh && C.railh.scrollable) {
|
|
C.setScrollLeft(l);
|
|
C.showCursor(i, l)
|
|
} else {
|
|
C.showCursor(i)
|
|
}
|
|
if (D.isie10) document.selection.clear()
|
|
}
|
|
});
|
|
if (!D.ischrome && !C.istouchcapable) return C.cancelEvent(e)
|
|
}
|
|
}
|
|
}
|
|
if (D.cantouch || C.opt.touchbehavior) {
|
|
C.onpreventclick = function(e) {
|
|
if (C.preventclick) {
|
|
C.preventclick.tg.onclick = C.preventclick.click;
|
|
C.preventclick = false;
|
|
return C.cancelEvent(e)
|
|
}
|
|
};
|
|
C.onmousedown = C.ontouchstart;
|
|
C.onmouseup = C.ontouchend;
|
|
C.onclick = (D.isios) ? false: function(e) {
|
|
if (C.lastmouseup) {
|
|
C.lastmouseup = false;
|
|
return C.cancelEvent(e)
|
|
} else {
|
|
return true
|
|
}
|
|
};
|
|
C.onmousemove = C.ontouchmove;
|
|
if (D.cursorgrabvalue) {
|
|
C.css((C.ispage) ? C.doc: C.win, {
|
|
'cursor': D.cursorgrabvalue
|
|
});
|
|
C.css(C.rail, {
|
|
'cursor': D.cursorgrabvalue
|
|
})
|
|
}
|
|
} else {
|
|
C.onmousedown = function(e, a) {
|
|
if (C.rail.drag && C.rail.drag.pt != 1) return;
|
|
if (C.locked) return C.cancelEvent(e);
|
|
C.cancelScroll();
|
|
C.rail.drag = {
|
|
x: e.clientX,
|
|
y: e.clientY,
|
|
sx: C.scroll.x,
|
|
sy: C.scroll.y,
|
|
pt: 1,
|
|
hr: ( !! a)
|
|
};
|
|
var b = C.getTarget(e);
|
|
if (!C.ispage && D.hasmousecapture) b.setCapture();
|
|
if (C.isiframe && !D.hasmousecapture) {
|
|
C.saved["csspointerevents"] = C.doc.css("pointer-events");
|
|
C.css(C.doc, {
|
|
"pointer-events": "none"
|
|
})
|
|
}
|
|
return C.cancelEvent(e)
|
|
};
|
|
C.onmouseup = function(e) {
|
|
if (C.rail.drag) {
|
|
if (D.hasmousecapture) document.releaseCapture();
|
|
if (C.isiframe && !D.hasmousecapture) C.doc.css("pointer-events", C.saved["csspointerevents"]);
|
|
if (C.rail.drag.pt != 1) return;
|
|
C.rail.drag = false;
|
|
return C.cancelEvent(e)
|
|
}
|
|
};
|
|
C.onmousemove = function(e) {
|
|
if (C.rail.drag) {
|
|
if (C.rail.drag.pt != 1) return;
|
|
if (D.ischrome && e.which == 0) return C.onmouseup(e);
|
|
C.cursorfreezed = true;
|
|
if (C.rail.drag.hr) {
|
|
C.scroll.x = C.rail.drag.sx + (e.clientX - C.rail.drag.x);
|
|
if (C.scroll.x < 0) C.scroll.x = 0;
|
|
var a = C.scrollvaluemaxw;
|
|
if (C.scroll.x > a) C.scroll.x = a
|
|
} else {
|
|
C.scroll.y = C.rail.drag.sy + (e.clientY - C.rail.drag.y);
|
|
if (C.scroll.y < 0) C.scroll.y = 0;
|
|
var b = C.scrollvaluemax;
|
|
if (C.scroll.y > b) C.scroll.y = b
|
|
}
|
|
C.synched('mousemove',
|
|
function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.rail.drag && (C.rail.drag.pt == 1)) {
|
|
C.showCursor();
|
|
if (C.rail.drag.hr) C.doScrollLeft(Math.round(C.scroll.x * C.scrollratio.x));
|
|
else C.doScrollTop(Math.round(C.scroll.y * C.scrollratio.y))
|
|
}
|
|
});
|
|
return C.cancelEvent(e)
|
|
} else {
|
|
C.checkarea = true
|
|
}
|
|
}
|
|
}
|
|
if (D.cantouch || C.opt.touchbehavior) {
|
|
C.bind(C.win, "mousedown", C.onmousedown)
|
|
}
|
|
if (D.hasmstouch) {
|
|
C.css(C.rail, {
|
|
'-ms-touch-action': 'none'
|
|
});
|
|
C.css(C.cursor, {
|
|
'-ms-touch-action': 'none'
|
|
});
|
|
C.bind(C.win, "MSPointerDown", C.ontouchstart);
|
|
C.bind(document, "MSPointerUp", C.ontouchend);
|
|
C.bind(document, "MSPointerMove", C.ontouchmove);
|
|
C.bind(C.cursor, "MSGestureHold",
|
|
function(e) {
|
|
e.preventDefault()
|
|
});
|
|
C.bind(C.cursor, "contextmenu",
|
|
function(e) {
|
|
e.preventDefault()
|
|
})
|
|
}
|
|
if (this.istouchcapable) {
|
|
C.bind(C.win, "touchstart", C.ontouchstart);
|
|
C.bind(document, "touchend", C.ontouchend);
|
|
C.bind(document, "touchcancel", C.ontouchend);
|
|
C.bind(document, "touchmove", C.ontouchmove)
|
|
}
|
|
C.bind(C.cursor, "mousedown", C.onmousedown);
|
|
C.bind(C.cursor, "mouseup", C.onmouseup);
|
|
if (C.railh) {
|
|
C.bind(C.cursorh, "mousedown",
|
|
function(e) {
|
|
C.onmousedown(e, true)
|
|
});
|
|
C.bind(C.cursorh, "mouseup",
|
|
function(e) {
|
|
if (C.rail.drag && C.rail.drag.pt == 2) return;
|
|
C.rail.drag = false;
|
|
C.hasmoving = false;
|
|
C.hideCursor();
|
|
if (D.hasmousecapture) document.releaseCapture();
|
|
return C.cancelEvent(e)
|
|
})
|
|
}
|
|
C.bind(document, "mouseup", C.onmouseup);
|
|
if (D.hasmousecapture) C.bind(C.win, "mouseup", C.onmouseup);
|
|
C.bind(document, "mousemove", C.onmousemove);
|
|
if (C.onclick) C.bind(document, "click", C.onclick);
|
|
if (!D.cantouch && !C.opt.touchbehavior) {
|
|
C.jqbind(C.rail, "mouseenter",
|
|
function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.canshowonmouseevent) C.showCursor();
|
|
C.rail.active = true
|
|
});
|
|
C.jqbind(C.rail, "mouseleave",
|
|
function() {
|
|
C.rail.active = false;
|
|
if (!C.rail.drag) C.hideCursor()
|
|
});
|
|
if (C.opt.sensitiverail) {
|
|
C.bind(C.rail, "click",
|
|
function(e) {
|
|
C.doRailClick(e, false, false)
|
|
});
|
|
C.bind(C.rail, "dblclick",
|
|
function(e) {
|
|
C.doRailClick(e, true, false)
|
|
});
|
|
C.bind(C.cursor, "click",
|
|
function(e) {
|
|
C.cancelEvent(e)
|
|
});
|
|
C.bind(C.cursor, "dblclick",
|
|
function(e) {
|
|
C.cancelEvent(e)
|
|
})
|
|
}
|
|
if (C.railh) {
|
|
C.jqbind(C.railh, "mouseenter",
|
|
function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.canshowonmouseevent) C.showCursor();
|
|
C.rail.active = true
|
|
});
|
|
C.jqbind(C.railh, "mouseleave",
|
|
function() {
|
|
C.rail.active = false;
|
|
if (!C.rail.drag) C.hideCursor()
|
|
});
|
|
if (C.opt.sensitiverail) {
|
|
C.bind(C.railh, "click",
|
|
function(e) {
|
|
C.doRailClick(e, false, true)
|
|
});
|
|
C.bind(C.railh, "dblclick",
|
|
function(e) {
|
|
C.doRailClick(e, true, true)
|
|
});
|
|
C.bind(C.cursorh, "click",
|
|
function(e) {
|
|
C.cancelEvent(e)
|
|
});
|
|
C.bind(C.cursorh, "dblclick",
|
|
function(e) {
|
|
C.cancelEvent(e)
|
|
})
|
|
}
|
|
}
|
|
if (C.zoom) {
|
|
C.jqbind(C.zoom, "mouseenter",
|
|
function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.canshowonmouseevent) C.showCursor();
|
|
C.rail.active = true
|
|
});
|
|
C.jqbind(C.zoom, "mouseleave",
|
|
function() {
|
|
C.rail.active = false;
|
|
if (!C.rail.drag) C.hideCursor()
|
|
})
|
|
}
|
|
}
|
|
if (C.opt.enablemousewheel) {
|
|
if (!C.isiframe) C.bind((D.isie && C.ispage) ? document: C.docscroll, "mousewheel", C.onmousewheel);
|
|
C.bind(C.rail, "mousewheel", C.onmousewheel);
|
|
if (C.railh) C.bind(C.railh, "mousewheel", C.onmousewheelhr)
|
|
}
|
|
if (!C.ispage && !D.cantouch && !(/HTML|BODY/.test(C.win[0].nodeName))) {
|
|
if (!C.win.attr("tabindex")) C.win.attr({
|
|
"tabindex": J++
|
|
});
|
|
C.jqbind(C.win, "focus",
|
|
function(e) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
G = (C.getTarget(e)).id || true;
|
|
C.hasfocus = true;
|
|
if (C.canshowonmouseevent) C.noticeCursor()
|
|
});
|
|
C.jqbind(C.win, "blur",
|
|
function(e) {
|
|
G = false;
|
|
C.hasfocus = false
|
|
});
|
|
C.jqbind(C.win, "mouseenter",
|
|
function(e) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
H = (C.getTarget(e)).id || true;
|
|
C.hasmousefocus = true;
|
|
if (C.canshowonmouseevent) C.noticeCursor()
|
|
});
|
|
C.jqbind(C.win, "mouseleave",
|
|
function() {
|
|
H = false;
|
|
C.hasmousefocus = false
|
|
})
|
|
}
|
|
}
|
|
C.onkeypress = function(e) {
|
|
if (C.locked && C.page.maxh == 0) return true;
|
|
e = (e) ? e: window.e;
|
|
var a = C.getTarget(e);
|
|
if (a && /INPUT|TEXTAREA|SELECT|OPTION/.test(a.nodeName)) {
|
|
var b = a.getAttribute('type') || a.type || false;
|
|
if ((!b) || !(/submit|button|cancel/i.tp)) return true
|
|
}
|
|
if (C.hasfocus || (C.hasmousefocus && !G) || (C.ispage && !G && !H)) {
|
|
var c = e.keyCode;
|
|
if (C.locked && c != 27) return C.cancelEvent(e);
|
|
var d = e.ctrlKey || false;
|
|
var f = e.shiftKey || false;
|
|
var g = false;
|
|
switch (c) {
|
|
case 38:
|
|
case 63233:
|
|
C.doScrollBy(24 * 3);
|
|
g = true;
|
|
break;
|
|
case 40:
|
|
case 63235:
|
|
C.doScrollBy( - 24 * 3);
|
|
g = true;
|
|
break;
|
|
case 37:
|
|
case 63232:
|
|
if (C.railh) { (d) ? C.doScrollLeft(0) : C.doScrollLeftBy(24 * 3);
|
|
g = true
|
|
}
|
|
break;
|
|
case 39:
|
|
case 63234:
|
|
if (C.railh) { (d) ? C.doScrollLeft(C.page.maxw) : C.doScrollLeftBy( - 24 * 3);
|
|
g = true
|
|
}
|
|
break;
|
|
case 33:
|
|
case 63276:
|
|
C.doScrollBy(C.view.h);
|
|
g = true;
|
|
break;
|
|
case 34:
|
|
case 63277:
|
|
C.doScrollBy( - C.view.h);
|
|
g = true;
|
|
break;
|
|
case 36:
|
|
case 63273:
|
|
(C.railh && d) ? C.doScrollPos(0, 0) : C.doScrollTo(0);
|
|
g = true;
|
|
break;
|
|
case 35:
|
|
case 63275:
|
|
(C.railh && d) ? C.doScrollPos(C.page.maxw, C.page.maxh) : C.doScrollTo(C.page.maxh);
|
|
g = true;
|
|
break;
|
|
case 32:
|
|
if (C.opt.spacebarenabled) { (f) ? C.doScrollBy(C.view.h) : C.doScrollBy( - C.view.h);
|
|
g = true
|
|
}
|
|
break;
|
|
case 27:
|
|
if (C.zoomactive) {
|
|
C.doZoom();
|
|
g = true
|
|
}
|
|
break
|
|
}
|
|
if (g) return C.cancelEvent(e)
|
|
}
|
|
};
|
|
if (C.opt.enablekeyboard) C.bind(document, (D.isopera && !D.isopera12) ? "keypress": "keydown", C.onkeypress);
|
|
C.bind(window, 'resize', C.resize);
|
|
C.bind(window, 'orientationchange', C.resize);
|
|
C.bind(window, "load", C.resize);
|
|
if (D.ischrome && !C.ispage && !C.haswrapper) {
|
|
var y = C.win.attr("style");
|
|
var z = parseFloat(C.win.css("width")) + 1;
|
|
C.win.css('width', z);
|
|
C.synched("chromefix",
|
|
function() {
|
|
C.win.attr("style", y)
|
|
})
|
|
}
|
|
C.onAttributeChange = function(e) {
|
|
C.lazyResize()
|
|
};
|
|
if (!C.ispage && !C.haswrapper) {
|
|
if ("WebKitMutationObserver" in window) {
|
|
C.observer = new WebKitMutationObserver(function(a) {
|
|
a.forEach(C.onAttributeChange)
|
|
});
|
|
C.observer.observe(C.win[0], {
|
|
attributes: true,
|
|
subtree: false
|
|
})
|
|
} else {
|
|
C.bind(C.win, (D.isie && !D.isie9) ? "propertychange": "DOMAttrModified", C.onAttributeChange);
|
|
if (D.isie9) C.win[0].attachEvent("onpropertychange", C.onAttributeChange)
|
|
}
|
|
}
|
|
if (!C.ispage && C.opt.boxzoom) C.bind(window, "resize", C.resizeZoom);
|
|
if (C.istextarea) C.bind(C.win, "mouseup", C.resize);
|
|
C.resize()
|
|
}
|
|
if (this.doc[0].nodeName == 'IFRAME') {
|
|
function oniframeload(e) {
|
|
C.iframexd = false;
|
|
try {
|
|
var b = 'contentDocument' in this ? this.contentDocument: this.contentWindow.document;
|
|
var a = b.domain
|
|
} catch(e) {
|
|
C.iframexd = true;
|
|
b = false
|
|
};
|
|
if (C.iframexd) {
|
|
if ("console" in window) console.log('NiceScroll error: policy restriced iframe');
|
|
return true
|
|
}
|
|
C.forcescreen = true;
|
|
if (C.isiframe) {
|
|
C.iframe = {
|
|
"doc": $(b),
|
|
"html": C.doc.contents().find('html')[0],
|
|
"body": C.doc.contents().find('body')[0]
|
|
};
|
|
C.getContentSize = function() {
|
|
return {
|
|
w: Math.max(C.iframe.html.scrollWidth, C.iframe.body.scrollWidth),
|
|
h: Math.max(C.iframe.html.scrollHeight, C.iframe.body.scrollHeight)
|
|
}
|
|
};
|
|
C.docscroll = $(C.iframe.body)
|
|
}
|
|
if (!D.isios && C.opt.iframeautoresize && !C.isiframe) {
|
|
C.win.scrollTop(0);
|
|
C.doc.height("");
|
|
var c = Math.max(b.getElementsByTagName('html')[0].scrollHeight, b.body.scrollHeight);
|
|
C.doc.height(c)
|
|
}
|
|
C.resize();
|
|
if (D.isie7) C.css($(C.iframe.html), {
|
|
'overflow-y': 'hidden'
|
|
});
|
|
C.css($(C.iframe.body), {
|
|
'overflow-y': 'hidden'
|
|
});
|
|
if ('contentWindow' in this) {
|
|
C.bind(this.contentWindow, "scroll", C.onscroll)
|
|
} else {
|
|
C.bind(b, "scroll", C.onscroll)
|
|
}
|
|
if (C.opt.enablemousewheel) {
|
|
C.bind(b, "mousewheel", C.onmousewheel)
|
|
}
|
|
if (C.opt.enablekeyboard) C.bind(b, (D.isopera) ? "keypress": "keydown", C.onkeypress);
|
|
if (D.cantouch || C.opt.touchbehavior) {
|
|
C.bind(b, "mousedown", C.onmousedown);
|
|
C.bind(b, "mousemove",
|
|
function(e) {
|
|
C.onmousemove(e, true)
|
|
});
|
|
if (D.cursorgrabvalue) C.css($(b.body), {
|
|
'cursor': D.cursorgrabvalue
|
|
})
|
|
}
|
|
C.bind(b, "mouseup", C.onmouseup);
|
|
if (C.zoom) {
|
|
if (C.opt.dblclickzoom) C.bind(b, 'dblclick', C.doZoom);
|
|
if (C.ongesturezoom) C.bind(b, "gestureend", C.ongesturezoom)
|
|
}
|
|
};
|
|
if (this.doc[0].readyState && this.doc[0].readyState == "complete") {
|
|
setTimeout(function() {
|
|
oniframeload.call(C.doc[0], false)
|
|
},
|
|
500)
|
|
}
|
|
C.bind(this.doc, "load", oniframeload)
|
|
}
|
|
};
|
|
this.showCursor = function(a, b) {
|
|
if (C.cursortimeout) {
|
|
clearTimeout(C.cursortimeout);
|
|
C.cursortimeout = 0
|
|
}
|
|
if (!C.rail) return;
|
|
try {
|
|
var c = C.me.offset().top;
|
|
if (C.me.scrollParent && C.me.scrollParent().length > 0) {
|
|
if (C.rail.parent().get(0).tagName != "BODY") {
|
|
c = c - C.me.scrollParent().offset().top;
|
|
c = c + C.me.scrollParent().offset().scrollTop()
|
|
}
|
|
}
|
|
if (C.rail.parent().get(0).tagName != "BODY") {
|
|
c = c - F(".e8_boxhead").height()
|
|
}
|
|
C.rail.css("top", c);
|
|
if (!C.rail.data("__resize")) {
|
|
C.resize();
|
|
C.rail.data("__resize", true)
|
|
}
|
|
} catch(e) {
|
|
if (window.console) console.log(e, "jquery.nicescroll.js#showCursor")
|
|
}
|
|
if (C.autohidedom) {
|
|
C.autohidedom.stop().css({
|
|
opacity: C.opt.cursoropacitymax
|
|
});
|
|
C.cursoractive = true
|
|
}
|
|
if ((typeof a != "undefined") && (a !== false)) {
|
|
C.scroll.y = Math.round(a * 1 / C.scrollratio.y)
|
|
}
|
|
if (typeof b != "undefined") {
|
|
C.scroll.x = Math.round(b * 1 / C.scrollratio.x)
|
|
}
|
|
C.cursor.css({
|
|
height: C.cursorheight,
|
|
top: C.scroll.y
|
|
});
|
|
if (C.cursorh) { (!C.rail.align && C.rail.visibility) ? C.cursorh.css({
|
|
width: C.cursorwidth,
|
|
left: C.scroll.x + C.rail.width
|
|
}) : C.cursorh.css({
|
|
width: C.cursorwidth,
|
|
left: C.scroll.x
|
|
});
|
|
C.cursoractive = true
|
|
}
|
|
if (C.zoom) C.zoom.stop().css({
|
|
opacity: C.opt.cursoropacitymax
|
|
})
|
|
};
|
|
this.hideCursor = function(a) {
|
|
if (C.cursortimeout) return;
|
|
if (!C.rail) return;
|
|
if (!C.autohidedom) return;
|
|
if (a) {
|
|
C.cursortimeout = setTimeout(function() {
|
|
if (!C.rail.active || !C.showonmouseevent) {
|
|
C.autohidedom.stop().animate({
|
|
opacity: C.opt.cursoropacitymin
|
|
});
|
|
if (C.zoom) C.zoom.stop().animate({
|
|
opacity: C.opt.cursoropacitymin
|
|
});
|
|
C.cursoractive = false
|
|
}
|
|
C.cursortimeout = 0
|
|
},
|
|
a || 400)
|
|
} else {
|
|
if (!C.rail.active || !C.showonmouseevent) {
|
|
C.autohidedom.stop().animate({
|
|
opacity: C.opt.cursoropacitymin
|
|
});
|
|
if (C.zoom) C.zoom.stop().animate({
|
|
opacity: C.opt.cursoropacitymin
|
|
});
|
|
C.cursoractive = false
|
|
}
|
|
C.cursortimeout = 0
|
|
}
|
|
};
|
|
this.noticeCursor = function(a, b, c) {
|
|
C.showCursor(b, c);
|
|
if (!C.rail.active) C.hideCursor(a)
|
|
};
|
|
this.getContentSize = (C.ispage) ?
|
|
function() {
|
|
return {
|
|
w: Math.max(document.body.scrollWidth, document.documentElement.scrollWidth),
|
|
h: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)
|
|
}
|
|
}: (C.haswrapper) ?
|
|
function() {
|
|
return {
|
|
w: C.doc.outerWidth() + parseInt(C.win.css('paddingLeft')) + parseInt(C.win.css('paddingRight')),
|
|
h: C.doc.outerHeight() + parseInt(C.win.css('paddingTop')) + parseInt(C.win.css('paddingBottom'))
|
|
}
|
|
}: function() {
|
|
return {
|
|
w: C.docscroll[0].scrollWidth,
|
|
h: C.docscroll[0].scrollHeight
|
|
}
|
|
};
|
|
this.onResize = function(e, a) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (!C.win) return false;
|
|
if (!C.haswrapper && !C.ispage) {
|
|
if (C.win.css('display') == 'none') {
|
|
if (C.visibility) C.hideRail().hideRailHr();
|
|
return false
|
|
} else {
|
|
if (!C.hidden && !C.visibility) C.showRail().showRailHr()
|
|
}
|
|
}
|
|
var b = C.page.maxh;
|
|
var c = C.page.maxw;
|
|
var d = {
|
|
h: C.view.h,
|
|
w: C.view.w
|
|
};
|
|
C.view = {
|
|
w: (C.ispage) ? C.win.width() : parseInt(C.win[0].clientWidth),
|
|
h: (C.ispage) ? C.win.height() : parseInt(C.win[0].clientHeight)
|
|
};
|
|
C.page = (a) ? a: C.getContentSize();
|
|
C.page.maxh = Math.max(0, C.page.h - C.view.h);
|
|
C.page.maxw = Math.max(0, C.page.w - C.view.w);
|
|
if ((C.page.maxh == b) && (C.page.maxw == c) && (C.view.w == d.w)) {
|
|
if (!C.ispage) {
|
|
var f = C.win.offset();
|
|
if (C.lastposition) {
|
|
var g = C.lastposition;
|
|
if ((g.top == f.top) && (g.left == f.left)) return C
|
|
}
|
|
C.lastposition = f
|
|
} else {
|
|
return C
|
|
}
|
|
}
|
|
if (C.page.maxh == 0) {
|
|
C.hideRail();
|
|
C.scrollvaluemax = 0;
|
|
C.scroll.y = 0;
|
|
C.scrollratio.y = 0;
|
|
C.cursorheight = 0;
|
|
C.setScrollTop(0);
|
|
C.rail.scrollable = false
|
|
} else {
|
|
C.rail.scrollable = true
|
|
}
|
|
if (C.page.maxw == 0) {
|
|
C.hideRailHr();
|
|
C.scrollvaluemaxw = 0;
|
|
C.scroll.x = 0;
|
|
C.scrollratio.x = 0;
|
|
C.cursorwidth = 0;
|
|
C.setScrollLeft(0);
|
|
C.railh.scrollable = false
|
|
} else {
|
|
C.railh.scrollable = true
|
|
}
|
|
C.locked = (C.page.maxh == 0) && (C.page.maxw == 0);
|
|
if (C.locked) {
|
|
if (!C.ispage) C.updateScrollBar(C.view);
|
|
return false
|
|
}
|
|
if (!C.hidden && !C.visibility) {
|
|
C.showRail().showRailHr()
|
|
} else if (!C.hidden && !C.railh.visibility) C.showRailHr();
|
|
if (C.istextarea && C.win.css('resize') && C.win.css('resize') != 'none') C.view.h -= 20;
|
|
if (!C.ispage) C.updateScrollBar(C.view);
|
|
C.cursorheight = Math.min(C.view.h, Math.round(C.view.h * (C.view.h / C.page.h)));
|
|
C.cursorheight = (C.opt.cursorfixedheight) ? C.opt.cursorfixedheight: Math.max(C.opt.cursorminheight, C.cursorheight);
|
|
C.cursorwidth = Math.min(C.view.w, Math.round(C.view.w * (C.view.w / C.page.w)));
|
|
C.cursorwidth = (C.opt.cursorfixedheight) ? C.opt.cursorfixedheight: Math.max(C.opt.cursorminheight, C.cursorwidth);
|
|
C.scrollvaluemax = C.view.h - C.cursorheight - C.cursor.hborder;
|
|
if (C.railh) {
|
|
C.railh.width = (C.page.maxh > 0) ? (C.view.w - C.rail.width) : C.view.w;
|
|
C.scrollvaluemaxw = C.railh.width - C.cursorwidth - C.cursorh.wborder
|
|
}
|
|
C.scrollratio = {
|
|
x: (C.page.maxw / C.scrollvaluemaxw),
|
|
y: (C.page.maxh / C.scrollvaluemax)
|
|
};
|
|
var h = C.getScrollTop();
|
|
if (h > C.page.maxh) {
|
|
C.doScrollTop(C.page.maxh)
|
|
} else {
|
|
C.scroll.y = Math.round(C.getScrollTop() * (1 / C.scrollratio.y));
|
|
C.scroll.x = Math.round(C.getScrollLeft() * (1 / C.scrollratio.x));
|
|
if (C.cursoractive) C.noticeCursor()
|
|
}
|
|
if (C.scroll.y && (C.getScrollTop() == 0)) C.doScrollTo(Math.floor(C.scroll.y * C.scrollratio.y));
|
|
return C
|
|
};
|
|
this.resize = function() {
|
|
C.delayed('resize', C.onResize, 30);
|
|
return C
|
|
};
|
|
this.lazyResize = function() {
|
|
C.delayed('resize', C.resize, 250)
|
|
};
|
|
this._bind = function(a, b, c, d) {
|
|
C.events.push({
|
|
e: a,
|
|
n: b,
|
|
f: c,
|
|
b: d,
|
|
q: false
|
|
});
|
|
if (a.addEventListener) {
|
|
a.addEventListener(b, c, d || false)
|
|
} else if (a.attachEvent) {
|
|
a.attachEvent("on" + b, c)
|
|
} else {
|
|
a["on" + b] = c
|
|
}
|
|
};
|
|
this.jqbind = function(a, b, c) {
|
|
C.events.push({
|
|
e: a,
|
|
n: b,
|
|
f: c,
|
|
q: true
|
|
});
|
|
$(a).bind(b, c)
|
|
};
|
|
this.bind = function(b, c, d, f) {
|
|
var g = ("jquery" in b) ? b[0] : b;
|
|
if (g.addEventListener) {
|
|
if (D.cantouch && /mouseup|mousedown|mousemove/.test(c)) {
|
|
var h = (c == 'mousedown') ? 'touchstart': (c == 'mouseup') ? 'touchend': 'touchmove';
|
|
C._bind(g, h,
|
|
function(e) {
|
|
if (e.touches) {
|
|
if (e.touches.length < 2) {
|
|
var a = (e.touches.length) ? e.touches[0] : e;
|
|
a.original = e;
|
|
d.call(this, a)
|
|
}
|
|
} else if (e.changedTouches) {
|
|
var a = e.changedTouches[0];
|
|
a.original = e;
|
|
d.call(this, a)
|
|
}
|
|
},
|
|
f || false)
|
|
}
|
|
C._bind(g, c, d, f || false);
|
|
if (c == 'mousewheel') C._bind(g, "DOMMouseScroll", d, f || false);
|
|
if (D.cantouch && c == "mouseup") C._bind(g, "touchcancel", d, f || false)
|
|
} else {
|
|
C._bind(g, c,
|
|
function(e) {
|
|
e = e || window.event || false;
|
|
if (e) {
|
|
if (e.srcElement) e.target = e.srcElement
|
|
}
|
|
return ((d.call(g, e) === false) || f === false) ? C.cancelEvent(e) : true
|
|
})
|
|
}
|
|
};
|
|
this._unbind = function(a, b, c, d) {
|
|
if (a.removeEventListener) {
|
|
a.removeEventListener(b, c, d)
|
|
} else if (a.detachEvent) {
|
|
a.detachEvent('on' + b, c)
|
|
} else {
|
|
a['on' + b] = false
|
|
}
|
|
};
|
|
this.unbindAll = function() {
|
|
for (var a = 0; a < C.events.length; a++) {
|
|
var r = C.events[a]; (r.q) ? r.e.unbind(r.n, r.f) : C._unbind(r.e, r.n, r.f, r.b)
|
|
}
|
|
};
|
|
this.cancelEvent = function(e) {
|
|
var e = (e.original) ? e.original: (e) ? e: window.event || false;
|
|
if (!e) return false;
|
|
if (e.preventDefault) e.preventDefault();
|
|
if (e.stopPropagation) e.stopPropagation();
|
|
if (e.preventManipulation) e.preventManipulation();
|
|
e.cancelBubble = true;
|
|
e.cancel = true;
|
|
e.returnValue = false;
|
|
return false
|
|
};
|
|
this.stopPropagation = function(e) {
|
|
var e = (e.original) ? e.original: (e) ? e: window.event || false;
|
|
if (!e) return false;
|
|
if (e.stopPropagation) return e.stopPropagation();
|
|
if (e.cancelBubble) e.cancelBubble = true;
|
|
return false
|
|
};
|
|
this.showRail = function() {
|
|
if ((C.page.maxh != 0) && (C.ispage || C.win.css('display') != 'none')) {
|
|
C.visibility = true;
|
|
C.rail.visibility = true;
|
|
C.rail.css('display', 'block')
|
|
}
|
|
return C
|
|
};
|
|
this.showRailHr = function() {
|
|
if (!C.railh) return C;
|
|
if ((C.page.maxw != 0) && (C.ispage || C.win.css('display') != 'none')) {
|
|
C.railh.visibility = true;
|
|
C.railh.css('display', 'block')
|
|
}
|
|
return C
|
|
};
|
|
this.hideRail = function() {
|
|
C.visibility = false;
|
|
C.rail.visibility = false;
|
|
C.rail.css('display', 'none');
|
|
return C
|
|
};
|
|
this.hideRailHr = function() {
|
|
if (!C.railh) return C;
|
|
C.railh.visibility = false;
|
|
C.railh.css('display', 'none');
|
|
return C
|
|
};
|
|
this.show = function() {
|
|
C.hidden = false;
|
|
C.locked = false;
|
|
return C.showRail().showRailHr()
|
|
};
|
|
this.hide = function() {
|
|
C.hidden = true;
|
|
C.locked = true;
|
|
return C.hideRail().hideRailHr()
|
|
};
|
|
this.toggle = function() {
|
|
return (C.hidden) ? C.show() : C.hide()
|
|
};
|
|
this.remove = function() {
|
|
C.stop();
|
|
if (C.cursortimeout) clearTimeout(C.cursortimeout);
|
|
C.doZoomOut();
|
|
C.unbindAll();
|
|
if (C.observer !== false) C.observer.disconnect();
|
|
C.events = [];
|
|
if (C.cursor) {
|
|
C.cursor.remove();
|
|
C.cursor = null
|
|
}
|
|
if (C.cursorh) {
|
|
C.cursorh.remove();
|
|
C.cursorh = null
|
|
}
|
|
if (C.rail) {
|
|
C.rail.remove();
|
|
C.rail = null
|
|
}
|
|
if (C.railh) {
|
|
C.railh.remove();
|
|
C.railh = null
|
|
}
|
|
if (C.zoom) {
|
|
C.zoom.remove();
|
|
C.zoom = null
|
|
}
|
|
for (var a = 0; a < C.saved.css.length; a++) {
|
|
var d = C.saved.css[a];
|
|
d[0].css(d[1], (typeof d[2] == "undefined") ? '': d[2])
|
|
}
|
|
C.saved = false;
|
|
C.me.data('__nicescroll', '');
|
|
C.me = null;
|
|
C.doc = null;
|
|
C.docscroll = null;
|
|
C.win = null;
|
|
return C
|
|
};
|
|
this.scrollstart = function(a) {
|
|
this.onscrollstart = a;
|
|
return C
|
|
};
|
|
this.scrollend = function(a) {
|
|
this.onscrollend = a;
|
|
return C
|
|
};
|
|
this.scrollcancel = function(a) {
|
|
this.onscrollcancel = a;
|
|
return C
|
|
};
|
|
this.zoomin = function(a) {
|
|
this.onzoomin = a;
|
|
return C
|
|
};
|
|
this.zoomout = function(a) {
|
|
this.onzoomout = a;
|
|
return C
|
|
};
|
|
this.isScrollable = function(e) {
|
|
var a = (e.target) ? e.target: e;
|
|
while (a && (a.nodeType == 1) && !(/BODY|HTML/.test(a.nodeName))) {
|
|
var b = $(a);
|
|
var c = b.css('overflowY') || b.css('overflowX') || b.css('overflow') || '';
|
|
if (/scroll|auto/.test(c)) return (a.clientHeight != a.scrollHeight);
|
|
a = (a.parentNode) ? a.parentNode: false
|
|
}
|
|
return false
|
|
};
|
|
this.getViewport = function(a) {
|
|
var b = (a && a.parentNode) ? a.parentNode: false;
|
|
while (b && (b.nodeType == 1) && !(/BODY|HTML/.test(b.nodeName))) {
|
|
var c = $(b);
|
|
var d = c.css('overflowY') || c.css('overflowX') || c.css('overflow') || '';
|
|
if ((/scroll|auto/.test(d)) && (b.clientHeight != b.scrollHeight)) return c;
|
|
if (c.getNiceScroll().length > 0) return c;
|
|
b = (b.parentNode) ? b.parentNode: false
|
|
}
|
|
return false
|
|
};
|
|
function execScrollWheel(e, b) {
|
|
var c = 0;
|
|
var d = 0;
|
|
var f = 1;
|
|
if ("wheelDeltaY" in e) {
|
|
f = C.opt.mousescrollstep / (16 * 3);
|
|
c = Math.floor(e.wheelDeltaX * f);
|
|
d = Math.floor(e.wheelDeltaY * f);
|
|
if (d < 0) d = d + 1;
|
|
if (b && (c == 0) && d) {
|
|
c = d;
|
|
d = 0
|
|
}
|
|
} else {
|
|
var g = e.detail ? e.detail * -1 : e.wheelDelta / 40;
|
|
if (g) { (b) ? c = Math.floor(g * C.opt.mousescrollstep) : d = Math.floor(g * C.opt.mousescrollstep)
|
|
}
|
|
}
|
|
if (c) {
|
|
if (C.scrollmom) {
|
|
C.scrollmom.stop()
|
|
}
|
|
C.lastdeltax += c;
|
|
C.synched("mousewheelx",
|
|
function() {
|
|
var a = C.lastdeltax;
|
|
C.lastdeltax = 0;
|
|
if (!C.rail.drag) {
|
|
C.doScrollLeftBy(a)
|
|
}
|
|
})
|
|
}
|
|
if (d) {
|
|
if (C.scrollmom) {
|
|
C.scrollmom.stop()
|
|
}
|
|
C.lastdeltay += d;
|
|
C.synched("mousewheely",
|
|
function() {
|
|
var a = C.lastdeltay;
|
|
C.lastdeltay = 0;
|
|
if (!C.rail.drag) {
|
|
C.doScrollBy(a)
|
|
}
|
|
})
|
|
}
|
|
};
|
|
this.onmousewheel = function(e) {
|
|
if (C.locked) return true;
|
|
if (!C.rail.scrollable) {
|
|
if (C.railh && C.railh.scrollable) {
|
|
return C.onmousewheelhr(e)
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
if (C.opt.preservenativescrolling && C.checkarea) {
|
|
C.checkarea = false;
|
|
C.nativescrollingarea = C.isScrollable(e)
|
|
}
|
|
if (C.nativescrollingarea) return true;
|
|
if (C.locked) return C.cancelEvent(e);
|
|
if (C.rail.drag) return C.cancelEvent(e);
|
|
execScrollWheel(e, false);
|
|
return C.cancelEvent(e)
|
|
};
|
|
this.onmousewheelhr = function(e) {
|
|
if (C.locked || !C.railh.scrollable) return true;
|
|
if (C.opt.preservenativescrolling && C.checkarea) {
|
|
C.checkarea = false;
|
|
C.nativescrollingarea = C.isScrollable(e)
|
|
}
|
|
if (C.nativescrollingarea) return true;
|
|
if (C.locked) return C.cancelEvent(e);
|
|
if (C.rail.drag) return C.cancelEvent(e);
|
|
execScrollWheel(e, true);
|
|
return C.cancelEvent(e)
|
|
};
|
|
this.stop = function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
C.cancelScroll();
|
|
if (C.scrollmon) C.scrollmon.stop();
|
|
C.cursorfreezed = false;
|
|
C.scroll.y = Math.round(C.getScrollTop() * (1 / C.scrollratio.y));
|
|
C.noticeCursor();
|
|
return C
|
|
};
|
|
this.getTransitionSpeed = function(a) {
|
|
var b = Math.round(C.opt.scrollspeed * 10);
|
|
var c = Math.min(b, Math.round((a / 20) * C.opt.scrollspeed));
|
|
return (c > 20) ? c: 0
|
|
};
|
|
if (!C.opt.smoothscroll) {
|
|
this.doScrollLeft = function(x, a) {
|
|
var y = C.getScrollTop();
|
|
C.doScrollPos(x, y, a)
|
|
};
|
|
this.doScrollTop = function(y, a) {
|
|
var x = C.getScrollLeft();
|
|
C.doScrollPos(x, y, a)
|
|
};
|
|
this.doScrollPos = function(x, y, a) {
|
|
var b = (x > C.page.maxw) ? C.page.maxw: x;
|
|
if (b < 0) b = 0;
|
|
var c = (y > C.page.maxh) ? C.page.maxh: y;
|
|
if (c < 0) c = 0;
|
|
C.synched('scroll',
|
|
function() {
|
|
C.setScrollTop(c);
|
|
C.setScrollLeft(b)
|
|
})
|
|
};
|
|
this.cancelScroll = function() {}
|
|
} else if (C.ishwscroll && D.hastransition && C.opt.usetransition) {
|
|
this.prepareTransition = function(a, b) {
|
|
var c = (b) ? ((a > 20) ? a: 0) : C.getTransitionSpeed(a);
|
|
var d = (c) ? D.prefixstyle + 'transform ' + c + 'ms ease-out': '';
|
|
if (!C.lasttransitionstyle || C.lasttransitionstyle != d) {
|
|
C.lasttransitionstyle = d;
|
|
C.doc.css(D.transitionstyle, d)
|
|
}
|
|
return c
|
|
};
|
|
this.doScrollLeft = function(x, a) {
|
|
var y = (C.scrollrunning) ? C.newscrolly: C.getScrollTop();
|
|
C.doScrollPos(x, y, a)
|
|
};
|
|
this.doScrollTop = function(y, a) {
|
|
var x = (C.scrollrunning) ? C.newscrollx: C.getScrollLeft();
|
|
C.doScrollPos(x, y, a)
|
|
};
|
|
this.doScrollPos = function(x, y, k) {
|
|
var l = C.getScrollTop();
|
|
var m = C.getScrollLeft();
|
|
if (((C.newscrolly - l) * (y - l) < 0) || ((C.newscrollx - m) * (x - m) < 0)) C.cancelScroll();
|
|
if (C.opt.bouncescroll == false) {
|
|
if (y < 0) y = 0;
|
|
else if (y > C.page.maxh) y = C.page.maxh;
|
|
if (x < 0) x = 0;
|
|
else if (x > C.page.maxw) x = C.page.maxw
|
|
}
|
|
if (x == C.newscrollx && y == C.newscrolly) return false;
|
|
C.newscrolly = y;
|
|
C.newscrollx = x;
|
|
C.newscrollspeed = k || false;
|
|
if (C.timer) return false;
|
|
C.timer = setTimeout(function() {
|
|
var a = C.getScrollTop();
|
|
var b = C.getScrollLeft();
|
|
var c = {};
|
|
c.x = x - b;
|
|
c.y = y - a;
|
|
c.px = b;
|
|
c.py = a;
|
|
var d = Math.round(Math.sqrt(Math.pow(c.x, 2) + Math.pow(c.y, 2)));
|
|
var f = (C.newscrollspeed) ? C.newscrollspeed: d;
|
|
var g = C.prepareTransition(f);
|
|
if (C.timerscroll && C.timerscroll.tm) clearInterval(C.timerscroll.tm);
|
|
if (g > 0) {
|
|
if (!C.scrollrunning && C.onscrollstart) {
|
|
var h = {
|
|
"type": "scrollstart",
|
|
"current": {
|
|
"x": b,
|
|
"y": a
|
|
},
|
|
"request": {
|
|
"x": x,
|
|
"y": y
|
|
},
|
|
"end": {
|
|
"x": C.newscrollx,
|
|
"y": C.newscrolly
|
|
},
|
|
"speed": g
|
|
};
|
|
C.onscrollstart.call(C, h)
|
|
}
|
|
if (D.transitionend) {
|
|
if (!C.scrollendtrapped) {
|
|
C.scrollendtrapped = true;
|
|
C.bind(C.doc, D.transitionend, C.onScrollEnd, false)
|
|
}
|
|
} else {
|
|
if (C.scrollendtrapped) clearTimeout(C.scrollendtrapped);
|
|
C.scrollendtrapped = setTimeout(C.onScrollEnd, g)
|
|
}
|
|
var i = a;
|
|
var j = b;
|
|
C.timerscroll = {
|
|
bz: new BezierClass(i, C.newscrolly, g, 0, 0, 0.58, 1),
|
|
bh: new BezierClass(j, C.newscrollx, g, 0, 0, 0.58, 1)
|
|
};
|
|
if (!C.cursorfreezed) C.timerscroll.tm = setInterval(function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
C.showCursor(C.getScrollTop(), C.getScrollLeft())
|
|
},
|
|
60)
|
|
}
|
|
C.synched("doScroll-set",
|
|
function() {
|
|
C.timer = 0;
|
|
if (C.scrollendtrapped) C.scrollrunning = true;
|
|
C.setScrollTop(C.newscrolly);
|
|
C.setScrollLeft(C.newscrollx);
|
|
if (!C.scrollendtrapped) C.onScrollEnd()
|
|
})
|
|
},
|
|
50)
|
|
};
|
|
this.cancelScroll = function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (!C.scrollendtrapped) return true;
|
|
var a = C.getScrollTop();
|
|
var b = C.getScrollLeft();
|
|
C.scrollrunning = false;
|
|
if (!D.transitionend) clearTimeout(D.transitionend);
|
|
C.scrollendtrapped = false;
|
|
C._unbind(C.doc, D.transitionend, C.onScrollEnd);
|
|
C.prepareTransition(0);
|
|
C.setScrollTop(a);
|
|
if (C.railh) C.setScrollLeft(b);
|
|
if (C.timerscroll && C.timerscroll.tm) clearInterval(C.timerscroll.tm);
|
|
C.timerscroll = false;
|
|
C.cursorfreezed = false;
|
|
C.showCursor(a, b);
|
|
return C
|
|
};
|
|
this.onScrollEnd = function() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {};
|
|
if (C.scrollendtrapped) C._unbind(C.doc, D.transitionend, C.onScrollEnd);
|
|
C.scrollendtrapped = false;
|
|
C.prepareTransition(0);
|
|
if (C.timerscroll && C.timerscroll.tm) clearInterval(C.timerscroll.tm);
|
|
C.timerscroll = false;
|
|
var a = C.getScrollTop();
|
|
var b = C.getScrollLeft();
|
|
C.setScrollTop(a);
|
|
if (C.railh) C.setScrollLeft(b);
|
|
C.noticeCursor(false, a, b);
|
|
C.cursorfreezed = false;
|
|
if (a < 0) a = 0;
|
|
else if (a > C.page.maxh) a = C.page.maxh;
|
|
if (b < 0) b = 0;
|
|
else if (b > C.page.maxw) b = C.page.maxw;
|
|
if ((a != C.newscrolly) || (b != C.newscrollx)) return C.doScrollPos(b, a, C.opt.snapbackspeed);
|
|
if (C.onscrollend && C.scrollrunning) {
|
|
var c = {
|
|
"type": "scrollend",
|
|
"current": {
|
|
"x": b,
|
|
"y": a
|
|
},
|
|
"end": {
|
|
"x": C.newscrollx,
|
|
"y": C.newscrolly
|
|
}
|
|
};
|
|
C.onscrollend.call(C, c)
|
|
}
|
|
C.scrollrunning = false
|
|
}
|
|
} else {
|
|
this.doScrollLeft = function(x) {
|
|
var y = (C.scrollrunning) ? C.newscrolly: C.getScrollTop();
|
|
C.doScrollPos(x, y)
|
|
};
|
|
this.doScrollTop = function(y) {
|
|
var x = (C.scrollrunning) ? C.newscrollx: C.getScrollLeft();
|
|
C.doScrollPos(x, y)
|
|
};
|
|
this.doScrollPos = function(x, y) {
|
|
var y = ((typeof y == "undefined") || (y === false)) ? C.getScrollTop(true) : y;
|
|
if ((C.timer) && (C.newscrolly == y) && (C.newscrollx == x)) return true;
|
|
if (C.timer) N(C.timer);
|
|
C.timer = 0;
|
|
var g = C.getScrollTop();
|
|
var h = C.getScrollLeft();
|
|
if (((C.newscrolly - g) * (y - g) < 0) || ((C.newscrollx - h) * (x - h) < 0)) C.cancelScroll();
|
|
C.newscrolly = y;
|
|
C.newscrollx = x;
|
|
if (!C.bouncescroll || !C.rail.visibility) {
|
|
if (C.newscrolly < 0) {
|
|
C.newscrolly = 0
|
|
} else if (C.newscrolly > C.page.maxh) {
|
|
C.newscrolly = C.page.maxh
|
|
}
|
|
}
|
|
if (!C.bouncescroll || !C.railh.visibility) {
|
|
if (C.newscrollx < 0) {
|
|
C.newscrollx = 0
|
|
} else if (C.newscrollx > C.page.maxw) {
|
|
C.newscrollx = C.page.maxw
|
|
}
|
|
}
|
|
C.dst = {};
|
|
C.dst.x = x - h;
|
|
C.dst.y = y - g;
|
|
C.dst.px = h;
|
|
C.dst.py = g;
|
|
var i = Math.round(Math.sqrt(Math.pow(C.dst.x, 2) + Math.pow(C.dst.y, 2)));
|
|
C.dst.ax = C.dst.x / i;
|
|
C.dst.ay = C.dst.y / i;
|
|
var j = 0;
|
|
var k = i;
|
|
if (C.dst.x == 0) {
|
|
j = g;
|
|
k = y;
|
|
C.dst.ay = 1;
|
|
C.dst.py = 0
|
|
} else if (C.dst.y == 0) {
|
|
j = h;
|
|
k = x;
|
|
C.dst.ax = 1;
|
|
C.dst.px = 0
|
|
}
|
|
var l = C.getTransitionSpeed(i);
|
|
if (l > 0) {
|
|
C.bzscroll = (C.bzscroll) ? C.bzscroll.update(k, l) : new BezierClass(j, k, l, 0, 1, 0, 1)
|
|
} else {
|
|
C.bzscroll = false
|
|
}
|
|
if (C.timer) return;
|
|
if ((g == C.page.maxh && y >= C.page.maxh) || (h == C.page.maxw && x >= C.page.maxw)) C.checkContentSize();
|
|
var m = 1;
|
|
function scrolling() {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {}
|
|
if (C.cancelAnimationFrame) return true;
|
|
C.scrollrunning = true;
|
|
m = 1 - m;
|
|
if (m) return (C.timer = M(scrolling) || 1);
|
|
var a = 0;
|
|
var b = sy = C.getScrollTop();
|
|
if (C.dst.ay) {
|
|
b = (C.bzscroll) ? C.dst.py + (C.bzscroll.getNow() * C.dst.ay) : C.newscrolly;
|
|
var c = b - sy;
|
|
if ((c < 0 && b < C.newscrolly) || (c > 0 && b > C.newscrolly)) b = C.newscrolly;
|
|
C.setScrollTop(b);
|
|
if (b == C.newscrolly) a = 1
|
|
} else {
|
|
a = 1
|
|
}
|
|
var d = sx = C.getScrollLeft();
|
|
if (C.dst.ax) {
|
|
d = (C.bzscroll) ? C.dst.px + (C.bzscroll.getNow() * C.dst.ax) : C.newscrollx;
|
|
var c = d - sx;
|
|
if ((c < 0 && d < C.newscrollx) || (c > 0 && d > C.newscrollx)) d = C.newscrollx;
|
|
C.setScrollLeft(d);
|
|
if (d == C.newscrollx) a += 1
|
|
} else {
|
|
a += 1
|
|
}
|
|
if (a == 2) {
|
|
C.timer = 0;
|
|
C.cursorfreezed = false;
|
|
C.bzscroll = false;
|
|
C.scrollrunning = false;
|
|
if (b < 0) b = 0;
|
|
else if (b > C.page.maxh) b = C.page.maxh;
|
|
if (d < 0) d = 0;
|
|
else if (d > C.page.maxw) d = C.page.maxw;
|
|
if ((d != C.newscrollx) || (b != C.newscrolly)) C.doScrollPos(d, b);
|
|
else {
|
|
if (C.onscrollend) {
|
|
var f = {
|
|
"type": "scrollend",
|
|
"current": {
|
|
"x": sx,
|
|
"y": sy
|
|
},
|
|
"end": {
|
|
"x": C.newscrollx,
|
|
"y": C.newscrolly
|
|
}
|
|
};
|
|
C.onscrollend.call(C, f)
|
|
}
|
|
}
|
|
} else {
|
|
C.timer = M(scrolling) || 1
|
|
}
|
|
};
|
|
C.cancelAnimationFrame = false;
|
|
C.timer = 1;
|
|
if (C.onscrollstart && !C.scrollrunning) {
|
|
var n = {
|
|
"type": "scrollstart",
|
|
"current": {
|
|
"x": h,
|
|
"y": g
|
|
},
|
|
"request": {
|
|
"x": x,
|
|
"y": y
|
|
},
|
|
"end": {
|
|
"x": C.newscrollx,
|
|
"y": C.newscrolly
|
|
},
|
|
"speed": l
|
|
};
|
|
C.onscrollstart.call(C, n)
|
|
}
|
|
scrolling();
|
|
if ((g == C.page.maxh && y >= g) || (h == C.page.maxw && x >= h)) C.checkContentSize();
|
|
C.noticeCursor()
|
|
};
|
|
this.cancelScroll = function() {
|
|
if (C.timer) N(C.timer);
|
|
C.timer = 0;
|
|
C.bzscroll = false;
|
|
C.scrollrunning = false;
|
|
return C
|
|
}
|
|
};
|
|
this.doScrollBy = function(a, b) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {};
|
|
var c = 0;
|
|
if (b) {
|
|
c = Math.floor((C.scroll.y - a) * C.scrollratio.y)
|
|
} else {
|
|
var d = (C.timer) ? C.newscrolly: C.getScrollTop(true);
|
|
c = d - a
|
|
}
|
|
if (C.bouncescroll) {
|
|
var f = Math.round(C.view.h / 2);
|
|
if (c < -f) c = -f;
|
|
else if (c > (C.page.maxh + f)) c = (C.page.maxh + f)
|
|
}
|
|
C.cursorfreezed = false;
|
|
py = C.getScrollTop(true);
|
|
if (c < 0 && py <= 0) return C.noticeCursor();
|
|
else if (c > C.page.maxh && py >= C.page.maxh) {
|
|
C.checkContentSize();
|
|
return C.noticeCursor()
|
|
}
|
|
C.doScrollTop(c)
|
|
};
|
|
this.doScrollLeftBy = function(a, b) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {};
|
|
var c = 0;
|
|
if (b) {
|
|
c = Math.floor((C.scroll.x - a) * C.scrollratio.x)
|
|
} else {
|
|
var d = (C.timer) ? C.newscrollx: C.getScrollLeft(true);
|
|
c = d - a
|
|
}
|
|
if (C.bouncescroll) {
|
|
var f = Math.round(C.view.w / 2);
|
|
if (c < -f) c = -f;
|
|
else if (c > (C.page.maxw + f)) c = (C.page.maxw + f)
|
|
}
|
|
C.cursorfreezed = false;
|
|
px = C.getScrollLeft(true);
|
|
if (c < 0 && px <= 0) return C.noticeCursor();
|
|
else if (c > C.page.maxw && px >= C.page.maxw) return C.noticeCursor();
|
|
C.doScrollLeft(c)
|
|
};
|
|
this.doScrollTo = function(a, b) {
|
|
var c = (b) ? Math.round(a * C.scrollratio.y) : a;
|
|
if (c < 0) c = 0;
|
|
else if (c > C.page.maxh) c = C.page.maxh;
|
|
C.cursorfreezed = false;
|
|
C.doScrollTop(a)
|
|
};
|
|
this.checkContentSize = function() {
|
|
var a = C.getContentSize();
|
|
if ((a.h != C.page.h) || (a.w != C.page.w)) C.resize(false, a)
|
|
};
|
|
C.onscroll = function(e) {
|
|
try {
|
|
if (C.me.is(":visible") === false) return
|
|
} catch(e) {};
|
|
if (C.rail.drag) return;
|
|
if (!C.cursorfreezed) {
|
|
C.synched('scroll',
|
|
function() {
|
|
C.scroll.y = Math.round(C.getScrollTop() * (1 / C.scrollratio.y));
|
|
if (C.railh) C.scroll.x = Math.round(C.getScrollLeft() * (1 / C.scrollratio.x));
|
|
C.noticeCursor()
|
|
})
|
|
}
|
|
};
|
|
C.bind(C.docscroll, "scroll", C.onscroll);
|
|
this.doZoomIn = function(e) {
|
|
if (C.zoomactive) return;
|
|
C.zoomactive = true;
|
|
C.zoomrestore = {
|
|
style: {}
|
|
};
|
|
var b = ['position', 'top', 'left', 'zIndex', 'backgroundColor', 'marginTop', 'marginBottom', 'marginLeft', 'marginRight'];
|
|
var c = C.win[0].style;
|
|
for (var a in b) {
|
|
var d = b[a];
|
|
C.zoomrestore.style[d] = (typeof c[d] != 'undefined') ? c[d] : ''
|
|
}
|
|
C.zoomrestore.style.width = C.win.css('width');
|
|
C.zoomrestore.style.height = C.win.css('height');
|
|
C.zoomrestore.padding = {
|
|
w: C.win.outerWidth() - C.win.width(),
|
|
h: C.win.outerHeight() - C.win.height()
|
|
};
|
|
if (D.isios4) {
|
|
C.zoomrestore.scrollTop = $(window).scrollTop();
|
|
$(window).scrollTop(0)
|
|
}
|
|
C.win.css({
|
|
"position": (D.isios4) ? "absolute": "fixed",
|
|
"top": 0,
|
|
"left": 0,
|
|
//"z-index": C.opt.zindex + 100,
|
|
"margin": "0px"
|
|
});
|
|
var f = C.win.css("backgroundColor");
|
|
if (f == "" || /transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(f)) C.win.css("backgroundColor", "#fff");
|
|
C.rail.css({
|
|
//"z-index": C.opt.zindex + 110
|
|
});
|
|
C.zoom.css({
|
|
//"z-index": C.opt.zindex + 112
|
|
});
|
|
C.zoom.css('backgroundPosition', '0px -18px');
|
|
C.resizeZoom();
|
|
if (C.onzoomin) C.onzoomin.call(C);
|
|
return C.cancelEvent(e)
|
|
};
|
|
this.doZoomOut = function(e) {
|
|
if (!C.zoomactive) return;
|
|
C.zoomactive = false;
|
|
C.win.css("margin", "");
|
|
C.win.css(C.zoomrestore.style);
|
|
if (D.isios4) {
|
|
$(window).scrollTop(C.zoomrestore.scrollTop)
|
|
}
|
|
C.rail.css({
|
|
//"z-index": (C.ispage) ? C.opt.zindex: C.opt.zindex + 2
|
|
});
|
|
C.zoom.css({
|
|
//"z-index": C.opt.zindex
|
|
});
|
|
C.zoomrestore = false;
|
|
C.zoom.css('backgroundPosition', '0px 0px');
|
|
C.onResize();
|
|
if (C.onzoomout) C.onzoomout.call(C);
|
|
return C.cancelEvent(e)
|
|
};
|
|
this.doZoom = function(e) {
|
|
return (C.zoomactive) ? C.doZoomOut(e) : C.doZoomIn(e)
|
|
};
|
|
this.resizeZoom = function() {
|
|
if (!C.zoomactive) return;
|
|
var a = C.getScrollTop();
|
|
C.win.css({
|
|
width: $(window).width() - C.zoomrestore.padding.w + "px",
|
|
height: $(window).height() - C.zoomrestore.padding.h + "px"
|
|
});
|
|
C.onResize();
|
|
console.log(a);
|
|
C.setScrollTop(Math.min(C.page.maxh, a))
|
|
};
|
|
this.init();
|
|
$.nicescroll.push(this)
|
|
};
|
|
var R = function(r) {
|
|
var s = this;
|
|
this.nc = r;
|
|
this.lastx = 0;
|
|
this.lasty = 0;
|
|
this.speedx = 0;
|
|
this.speedy = 0;
|
|
this.lasttime = 0;
|
|
this.steptime = 0;
|
|
this.snapx = false;
|
|
this.snapy = false;
|
|
this.demulx = 0;
|
|
this.demuly = 0;
|
|
this.lastscrollx = -1;
|
|
this.lastscrolly = -1;
|
|
this.chkx = 0;
|
|
this.chky = 0;
|
|
this.timer = 0;
|
|
this.time = function() {
|
|
return + new Date()
|
|
};
|
|
this.reset = function(a, b) {
|
|
s.stop();
|
|
var c = s.time();
|
|
s.steptime = 0;
|
|
s.lasttime = c;
|
|
s.speedx = 0;
|
|
s.speedy = 0;
|
|
s.lastx = a;
|
|
s.lasty = b;
|
|
s.lastscrollx = -1;
|
|
s.lastscrolly = -1
|
|
};
|
|
this.update = function(a, b) {
|
|
var c = s.time();
|
|
s.steptime = c - s.lasttime;
|
|
s.lasttime = c;
|
|
var d = b - s.lasty;
|
|
var e = a - s.lastx;
|
|
var f = s.nc.getScrollTop();
|
|
var g = s.nc.getScrollLeft();
|
|
var h = f + d;
|
|
var i = g + e;
|
|
s.snapx = (i < 0) || (i > s.nc.page.maxw);
|
|
s.snapy = (h < 0) || (h > s.nc.page.maxh);
|
|
s.speedx = e;
|
|
s.speedy = d;
|
|
s.lastx = a;
|
|
s.lasty = b
|
|
};
|
|
this.stop = function() {
|
|
s.nc.unsynched("domomentum2d");
|
|
if (s.timer) clearTimeout(s.timer);
|
|
s.timer = 0;
|
|
s.lastscrollx = -1;
|
|
s.lastscrolly = -1
|
|
};
|
|
this.doSnapy = function(a, b) {
|
|
var c = false;
|
|
if (b < 0) {
|
|
b = 0;
|
|
c = true
|
|
} else if (b > s.nc.page.maxh) {
|
|
b = s.nc.page.maxh;
|
|
c = true
|
|
}
|
|
if (a < 0) {
|
|
a = 0;
|
|
c = true
|
|
} else if (a > s.nc.page.maxw) {
|
|
a = s.nc.page.maxw;
|
|
c = true
|
|
}
|
|
if (c) s.nc.doScrollPos(a, b, s.nc.opt.snapbackspeed)
|
|
};
|
|
this.doMomentum = function(d) {
|
|
var t = s.time();
|
|
var l = (d) ? t + d: s.lasttime;
|
|
var e = s.nc.getScrollLeft();
|
|
var f = s.nc.getScrollTop();
|
|
var g = s.nc.page.maxh;
|
|
var h = s.nc.page.maxw;
|
|
s.speedx = (h > 0) ? Math.min(60, s.speedx) : 0;
|
|
s.speedy = (g > 0) ? Math.min(60, s.speedy) : 0;
|
|
var i = l && (t - l) <= 50;
|
|
if ((f < 0) || (f > g) || (e < 0) || (e > h)) i = false;
|
|
var j = (s.speedy && i) ? s.speedy: false;
|
|
var k = (s.speedx && i) ? s.speedx: false;
|
|
if (j || k) {
|
|
var m = Math.max(16, s.steptime);
|
|
if (m > 50) {
|
|
var n = m / 50;
|
|
s.speedx *= n;
|
|
s.speedy *= n;
|
|
m = 50
|
|
}
|
|
s.demulxy = 0;
|
|
s.lastscrollx = s.nc.getScrollLeft();
|
|
s.chkx = s.lastscrollx;
|
|
s.lastscrolly = s.nc.getScrollTop();
|
|
s.chky = s.lastscrolly;
|
|
var o = s.lastscrollx;
|
|
var p = s.lastscrolly;
|
|
var q = function() {
|
|
var c = ((s.time() - t) > 600) ? 0.04 : 0.02;
|
|
if (s.speedx) {
|
|
o = Math.floor(s.lastscrollx - (s.speedx * (1 - s.demulxy)));
|
|
s.lastscrollx = o;
|
|
if ((o < 0) || (o > h)) c = 0.10
|
|
}
|
|
if (s.speedy) {
|
|
p = Math.floor(s.lastscrolly - (s.speedy * (1 - s.demulxy)));
|
|
s.lastscrolly = p;
|
|
if ((p < 0) || (p > g)) c = 0.10
|
|
}
|
|
s.demulxy = Math.min(1, s.demulxy + c);
|
|
s.nc.synched("domomentum2d",
|
|
function() {
|
|
if (s.speedx) {
|
|
var a = s.nc.getScrollLeft();
|
|
if (a != s.chkx) s.stop();
|
|
s.chkx = o;
|
|
s.nc.setScrollLeft(o)
|
|
}
|
|
if (s.speedy) {
|
|
var b = s.nc.getScrollTop();
|
|
if (b != s.chky) s.stop();
|
|
s.chky = p;
|
|
s.nc.setScrollTop(p)
|
|
}
|
|
if (!s.timer) {
|
|
s.nc.hideCursor();
|
|
s.doSnapy(o, p)
|
|
}
|
|
});
|
|
if (s.demulxy < 1) {
|
|
s.timer = setTimeout(q, m)
|
|
} else {
|
|
s.stop();
|
|
s.nc.hideCursor();
|
|
s.doSnapy(o, p)
|
|
}
|
|
};
|
|
q()
|
|
} else {
|
|
s.doSnapy(s.nc.getScrollLeft(), s.nc.getScrollTop())
|
|
}
|
|
}
|
|
};
|
|
var S = F.fn.scrollTop;
|
|
$.cssHooks["pageYOffset"] = {
|
|
get: function(a, b, c) {
|
|
var d = $.data(a, '__nicescroll') || false;
|
|
return (d && d.ishwscroll) ? d.getScrollTop() : S.call(a)
|
|
},
|
|
set: function(a, b) {
|
|
var c = $.data(a, '__nicescroll') || false; (c && c.ishwscroll) ? c.setScrollTop(parseInt(b)) : S.call(a, b);
|
|
return this
|
|
}
|
|
};
|
|
F.fn.scrollTop = function(b) {
|
|
if (typeof b == "undefined") {
|
|
var c = (this[0]) ? $.data(this[0], '__nicescroll') || false: false;
|
|
return (c && c.ishwscroll) ? c.getScrollTop() : S.call(this)
|
|
} else {
|
|
return this.each(function() {
|
|
var a = $.data(this, '__nicescroll') || false; (a && a.ishwscroll) ? a.setScrollTop(parseInt(b)) : S.call($(this), b)
|
|
})
|
|
}
|
|
};
|
|
var T = F.fn.scrollLeft;
|
|
$.cssHooks.pageXOffset = {
|
|
get: function(a, b, c) {
|
|
var d = $.data(a, '__nicescroll') || false;
|
|
return (d && d.ishwscroll) ? d.getScrollLeft() : T.call(a)
|
|
},
|
|
set: function(a, b) {
|
|
var c = $.data(a, '__nicescroll') || false; (c && c.ishwscroll) ? c.setScrollLeft(parseInt(b)) : T.call(a, b);
|
|
return this
|
|
}
|
|
};
|
|
F.fn.scrollLeft = function(b) {
|
|
if (typeof b == "undefined") {
|
|
var c = (this[0]) ? $.data(this[0], '__nicescroll') || false: false;
|
|
return (c && c.ishwscroll) ? c.getScrollLeft() : T.call(this)
|
|
} else {
|
|
return this.each(function() {
|
|
var a = $.data(this, '__nicescroll') || false; (a && a.ishwscroll) ? a.setScrollLeft(parseInt(b)) : T.call($(this), b)
|
|
})
|
|
}
|
|
};
|
|
var U = function(c) {
|
|
var d = this;
|
|
this.length = 0;
|
|
this.name = "nicescrollarray";
|
|
this.each = function(b) {
|
|
for (var a = 0; a < d.length; a++) b.call(d[a]);
|
|
return d
|
|
};
|
|
this.push = function(a) {
|
|
d[d.length] = a;
|
|
d.length++
|
|
};
|
|
this.eq = function(a) {
|
|
return d[a]
|
|
};
|
|
if (c) {
|
|
for (a = 0; a < c.length; a++) {
|
|
var e = $.data(c[a], '__nicescroll') || false;
|
|
if (e) {
|
|
this[this.length] = e;
|
|
this.length++
|
|
}
|
|
}
|
|
}
|
|
return this
|
|
};
|
|
function mplex(b, c, d) {
|
|
for (var a = 0; a < c.length; a++) d(b, c[a])
|
|
};
|
|
mplex(U.prototype, ['show', 'hide', 'toggle', 'onResize', 'resize', 'remove', 'stop', 'doScrollPos'],
|
|
function(e, n) {
|
|
e[n] = function() {
|
|
var a = arguments;
|
|
return this.each(function() {
|
|
this[n].apply(this, a)
|
|
})
|
|
}
|
|
});
|
|
F.fn.getNiceScroll = function(a) {
|
|
if (typeof a == "undefined") {
|
|
return new U(this)
|
|
} else {
|
|
var b = $.data(this[a], '__nicescroll') || false;
|
|
return b
|
|
}
|
|
};
|
|
F.extend(F.expr[':'], {
|
|
nicescroll: function(a) {
|
|
return ($.data(a, '__nicescroll')) ? true: false
|
|
}
|
|
});
|
|
$.fn.niceScroll = function(b, c) {
|
|
if (typeof c == "undefined") {
|
|
if ((typeof b == "object") && !("jquery" in b)) {
|
|
c = b;
|
|
b = false
|
|
}
|
|
}
|
|
var d = new U();
|
|
if (typeof c == "undefined") c = {};
|
|
if (b || false) {
|
|
c.doc = $(b);
|
|
c.win = $(this)
|
|
}
|
|
var e = !("doc" in c);
|
|
if (!e && !("win" in c)) c.win = $(this);
|
|
this.each(function() {
|
|
var a = $(this).data('__nicescroll') || false;
|
|
if (!a) {
|
|
c.doc = (e) ? $(this) : c.doc;
|
|
a = new Q(c, $(this));
|
|
$(this).data('__nicescroll', a)
|
|
}
|
|
d.push(a)
|
|
});
|
|
return (d.length == 1) ? d[0] : d
|
|
};
|
|
window.NiceScroll = {
|
|
getjQuery: function() {
|
|
return F
|
|
}
|
|
};
|
|
if (!$.nicescroll) {
|
|
$.nicescroll = new U()
|
|
}
|
|
})(jQuery); (function($) {
|
|
$.fn.perfectScrollbar = function(a) {
|
|
if (a === "update" || a === "resize") {
|
|
$(this).getNiceScroll().resize();
|
|
return
|
|
} else if (a === "getScrollObj") {
|
|
return $(this).getNiceScroll()
|
|
} else if (a === "getScrollTop") {
|
|
var b = $(this).getNiceScroll().eq(0);
|
|
return b.getScrollTop()
|
|
} else if (a === "hide") {
|
|
$(this).getNiceScroll().hide()
|
|
} else if (a === "show") {
|
|
$(this).getNiceScroll().show()
|
|
} else if (a === "toggle") {
|
|
$(this).getNiceScroll().toggle()
|
|
} else if (a === "remove" || a === "destroy") {
|
|
$(this).getNiceScroll().remove()
|
|
} else if (a === "stop") {
|
|
$(this).getNiceScroll().stop()
|
|
} else if (a === "doScrollPos") {
|
|
$(this).getNiceScroll().doScrollPos()
|
|
}
|
|
a = jQuery.extend({
|
|
cursorwidth: 5,
|
|
cursorborder: "none",
|
|
cursorcolor: "#999",
|
|
hidecursordelay: 0,
|
|
//zindex: 10001,
|
|
horizrailenabled: false
|
|
},
|
|
a);
|
|
return $(this).niceScroll(a)
|
|
}
|
|
})(jQuery);
|