/*! 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.8 * */ ;(function (e) { e.fn.extend({ slimScroll: function (f) { var a = e.extend( { width: 'auto', height: '250px', size: '7px', 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', }, f ) this.each(function () { function v(d) { if (r) { d = d || window.event var c = 0 d.wheelDelta && (c = -d.wheelDelta / 120) d.detail && (c = d.detail / 3) e(d.target || d.srcTarget || d.srcElement) .closest('.' + a.wrapperClass) .is(b.parent()) && n(c, !0) d.preventDefault && !k && d.preventDefault() k || (d.returnValue = !1) } } function n(d, g, e) { k = !1 var f = b.outerHeight() - c.outerHeight() g && ((g = parseInt(c.css('top')) + ((d * parseInt(a.wheelStep)) / 100) * c.outerHeight()), (g = Math.min(Math.max(g, 0), f)), (g = 0 < d ? Math.ceil(g) : Math.floor(g)), c.css({ top: g + 'px' })) l = parseInt(c.css('top')) / (b.outerHeight() - c.outerHeight()) g = l * (b[0].scrollHeight - b.outerHeight()) e && ((g = d), (d = (g / b[0].scrollHeight) * b.outerHeight()), (d = Math.min(Math.max(d, 0), f)), c.css({ top: d + 'px' })) b.scrollTop(g) b.trigger('slimscrolling', ~~g) w() p() } function x() { u = Math.max( (b.outerHeight() / b[0].scrollHeight) * b.outerHeight(), 30 ) c.css({ height: u + 'px' }) var a = u == b.outerHeight() ? 'none' : 'block' c.css({ display: a }) } function w() { x() clearTimeout(B) l == ~~l ? ((k = a.allowPageScroll), C != l && b.trigger('slimscroll', 0 == ~~l ? 'top' : 'bottom')) : (k = !1) C = l u >= b.outerHeight() ? (k = !0) : (c.stop(!0, !0).fadeIn('fast'), a.railVisible && m.stop(!0, !0).fadeIn('fast')) } function p() { a.alwaysVisible || (B = setTimeout(function () { ;(a.disableFadeOut && r) || y || z || (c.fadeOut('slow'), m.fadeOut('slow')) }, 1e3)) } var r, y, z, B, A, u, l, C, k = !1, b = e(this) if (b.parent().hasClass(a.wrapperClass)) { var q = b.scrollTop(), c = b.siblings('.' + a.barClass), m = b.siblings('.' + a.railClass) x() if (e.isPlainObject(f)) { if ('height' in f && 'auto' == f.height) { b.parent().css('height', 'auto') b.css('height', 'auto') var h = b.parent().parent().height() b.parent().css('height', h) b.css('height', h) } else 'height' in f && ((h = f.height), b.parent().css('height', h), b.css('height', h)) if ('scrollTo' in f) q = parseInt(a.scrollTo) else if ('scrollBy' in f) q += parseInt(a.scrollBy) else if ('destroy' in f) { c.remove() m.remove() b.unwrap() return } n(q, !1, !0) } } else if (!(e.isPlainObject(f) && 'destroy' in f)) { a.height = 'auto' == a.height ? b.parent().height() : a.height q = e('
') .addClass(a.wrapperClass) .css({ position: 'relative', overflow: 'hidden', width: a.width, height: a.height, }) b.css({ overflow: 'hidden', width: a.width, height: a.height }) var m = e('
') .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 = e('
') .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, }), h = 'right' == a.position ? { right: a.distance } : { left: a.distance } m.css(h) c.css(h) b.wrap(q) b.parent().append(c) b.parent().append(m) a.railDraggable && c .bind('mousedown', function (a) { var b = e(document) z = !0 t = parseFloat(c.css('top')) pageY = a.pageY b.bind('mousemove.slimscroll', function (a) { currTop = t + a.pageY - pageY c.css('top', currTop) n(0, c.position().top, !1) }) b.bind('mouseup.slimscroll', function (a) { z = !1 p() b.unbind('.slimscroll') }) return !1 }) .bind('selectstart.slimscroll', function (a) { a.stopPropagation() a.preventDefault() return !1 }) m.hover( function () { w() }, function () { p() } ) c.hover( function () { y = !0 }, function () { y = !1 } ) b.hover( function () { r = !0 w() p() }, function () { r = !1 p() } ) b.bind('touchstart', function (a, b) { a.originalEvent.touches.length && (A = a.originalEvent.touches[0].pageY) }) b.bind('touchmove', function (b) { k || b.originalEvent.preventDefault() b.originalEvent.touches.length && (n( (A - b.originalEvent.touches[0].pageY) / a.touchScrollStep, !0 ), (A = b.originalEvent.touches[0].pageY)) }) x() 'bottom' === a.start ? (c.css({ top: b.outerHeight() - c.outerHeight() }), n(0, !0)) : 'top' !== a.start && (n(e(a.start).position().top, null, !0), a.alwaysVisible || c.hide()) window.addEventListener ? (this.addEventListener('DOMMouseScroll', v, !1), this.addEventListener('mousewheel', v, !1)) : document.attachEvent('onmousewheel', v) } }) return this }, }) e.fn.extend({ slimscroll: e.fn.slimScroll }) })(jQuery)