| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- *
- * Version: 1.3.0
- *
- */
- (function(f) {
- jQuery.fn.extend({
- slimScroll: function(h) {
- var a = f.extend({
- width: "auto",
- height: "250px",
- size: "4px",
- color: "#000",
- position: "right",
- distance: "1px",
- start: "top",
- opacity: 0.4,
- alwaysVisible: !1,
- disableFadeOut: !1,
- railVisible: !1,
- railColor: "#333",
- railOpacity: 0.2,
- railDraggable: !0,
- railClass: "slimScrollRail",
- barClass: "slimScrollBar",
- wrapperClass: "slimScrollDiv",
- allowPageScroll: !1,
- wheelStep: 20,
- touchScrollStep: 200,
- borderRadius: "7px",
- railBorderRadius: "7px"
- }, h);
- this.each(function() {
- function r(d) {
- if (s) {
- d = d ||
- window.event;
- var c = 0;
- d.wheelDelta && (c = -d.wheelDelta / 120);
- d.detail && (c = d.detail / 3);
- f(d.target || d.srcTarget || d.srcElement).closest("." + a.wrapperClass).is(b.parent()) && m(c, !0);
- // 解决 [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive.
- // d.preventDefault && !k && d.preventDefault();
- k || (d.returnValue = !1)
- }
- }
- function m(d, f, h) {
- k = !1;
- var e = d,
- g = b.outerHeight() - c.outerHeight();
- f && (e = parseInt(c.css("top")) + d * parseInt(a.wheelStep) / 100 * c.outerHeight(), e = Math.min(Math.max(
- e, 0), g), e = 0 < d ? Math.ceil(e) : Math.floor(e), c.css({
- top: e + "px"
- }));
- l = parseInt(c.css("top")) / (b.outerHeight() - c.outerHeight());
- e = l * (b[0].scrollHeight - b.outerHeight());
- h && (e = d, d = e / b[0].scrollHeight * b.outerHeight(), d = Math.min(Math.max(d, 0), g), c.css({
- top: d + "px"
- }));
- b.scrollTop(e);
- b.trigger("slimscrolling", ~~e);
- v();
- p()
- }
- function C() {
- window.addEventListener ? (this.addEventListener("DOMMouseScroll", r, !1), this.addEventListener(
- "mousewheel", r, !1), this.addEventListener("MozMousePixelScroll", r, !1)) : document.attachEvent(
- "onmousewheel", r)
- }
- function w() {
- u = Math.max(b.outerHeight() / b[0].scrollHeight * b.outerHeight(), D);
- c.css({
- height: u + "px"
- });
- var a = u == b.outerHeight() ? "none" : "block";
- c.css({
- display: a
- })
- }
- function v() {
- w();
- clearTimeout(A);
- l == ~~l ? (k = a.allowPageScroll, B != l && b.trigger("slimscroll", 0 == ~~l ? "top" : "bottom")) : k = !1;
- B = l;
- u >= b.outerHeight() ? k = !0 : (c.stop(!0, !0).fadeIn("fast"), a.railVisible && g.stop(!0, !0).fadeIn(
- "fast"))
- }
- function p() {
- a.alwaysVisible || (A = setTimeout(function() {
- a.disableFadeOut && s || (x || y) || (c.fadeOut("slow"), g.fadeOut("slow"))
- }, 1E3))
- }
- var s, x, y, A, z, u, l, B, D = 30,
- k = !1,
- b = f(this);
- if (b.parent().hasClass(a.wrapperClass)) {
- var n = b.scrollTop(),
- c = b.parent().find("." + a.barClass),
- g = b.parent().find("." + a.railClass);
- w();
- if (f.isPlainObject(h)) {
- if ("height" in h && "auto" == h.height) {
- b.parent().css("height", "auto");
- b.css("height", "auto");
- var q = b.parent().parent().height();
- b.parent().css("height", q);
- b.css("height", q)
- }
- if ("scrollTo" in h) n = parseInt(a.scrollTo);
- else if ("scrollBy" in h) n += parseInt(a.scrollBy);
- else if ("destroy" in h) {
- c.remove();
- g.remove();
- b.unwrap();
- return
- }
- m(n, !1, !0)
- }
- } else {
- a.height = "auto" == a.height ? b.parent().height() : a.height;
- n = f("<div></div>").addClass(a.wrapperClass).css({
- position: "relative",
- width: a.width,
- height: a.height
- });
- b.css({
- width: a.width,
- height: a.height
- });
- var g = f("<div></div>").addClass(a.railClass).css({
- width: a.size,
- height: "100%",
- position: "absolute",
- top: 0,
- display: a.alwaysVisible && a.railVisible ? "block" : "none",
- "border-radius": a.railBorderRadius,
- background: a.railColor,
- opacity: a.railOpacity,
- zIndex: 90
- }),
- c = f("<div></div>").addClass(a.barClass).css({
- background: a.color,
- width: a.size,
- position: "absolute",
- top: 0,
- opacity: a.opacity,
- display: a.alwaysVisible ?
- "block" : "none",
- "border-radius": a.borderRadius,
- BorderRadius: a.borderRadius,
- MozBorderRadius: a.borderRadius,
- WebkitBorderRadius: a.borderRadius,
- zIndex: 99
- }),
- q = "right" == a.position ? {
- right: a.distance
- } : {
- left: a.distance
- };
- g.css(q);
- c.css(q);
- b.wrap(n);
- b.parent().append(c);
- b.parent().append(g);
- a.railDraggable && c.bind("mousedown", function(a) {
- var b = f(document);
- y = !0;
- t = parseFloat(c.css("top"));
- pageY = a.pageY;
- b.bind("mousemove.slimscroll", function(a) {
- currTop = t + a.pageY - pageY;
- c.css("top", currTop);
- m(0, c.position().top, !1)
- });
- b.bind("mouseup.slimscroll", function(a) {
- y = !1;
- p();
- b.unbind(".slimscroll")
- });
- return !1
- }).bind("selectstart.slimscroll", function(a) {
- a.stopPropagation();
- a.preventDefault();
- return !1
- });
- g.hover(function() {
- v()
- }, function() {
- p()
- });
- c.hover(function() {
- x = !0
- }, function() {
- x = !1
- });
- b.hover(function() {
- s = !0;
- v();
- p()
- }, function() {
- s = !1;
- p()
- });
- b.bind("touchstart", function(a, b) {
- a.originalEvent.touches.length && (z = a.originalEvent.touches[0].pageY)
- });
- b.bind("touchmove", function(b) {
- k || b.originalEvent.preventDefault();
- b.originalEvent.touches.length &&
- (m((z - b.originalEvent.touches[0].pageY) / a.touchScrollStep, !0), z = b.originalEvent.touches[0].pageY)
- });
- w();
- "bottom" === a.start ? (c.css({
- top: b.outerHeight() - c.outerHeight()
- }), m(0, !0)) : "top" !== a.start && (m(f(a.start).position().top, null, !0), a.alwaysVisible || c.hide());
- C()
- }
- });
- return this
- }
- });
- jQuery.fn.extend({
- slimscroll: jQuery.fn.slimScroll
- })
- })(jQuery);
|