Fix issue #427 by updating slimscroll

pull/1109/head
Abdullah Almsaeed 2016-07-01 12:39:46 -04:00
parent db51bd8b98
commit bca8e8ec66
3 changed files with 205 additions and 206 deletions

View File

@ -2,7 +2,7 @@
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
* *
* Version: 1.3.3 * Version: 1.3.8
* *
*/ */
(function($) { (function($) {
@ -11,48 +11,70 @@
slimScroll: function(options) { slimScroll: function(options) {
var defaults = { var defaults = {
// width in pixels of the visible scroll area // width in pixels of the visible scroll area
width : 'auto', width : 'auto',
// height in pixels of the visible scroll area // height in pixels of the visible scroll area
height : '250px', height : '250px',
// width in pixels of the scrollbar and rail // width in pixels of the scrollbar and rail
size : '7px', size : '7px',
// scrollbar color, accepts any hex/color value // scrollbar color, accepts any hex/color value
color: '#000', color: '#000',
// scrollbar position - left/right // scrollbar position - left/right
position : 'right', position : 'right',
// distance in pixels between the side edge and the scrollbar // distance in pixels between the side edge and the scrollbar
distance : '1px', distance : '1px',
// default scroll position on load - top / bottom / $('selector') // default scroll position on load - top / bottom / $('selector')
start : 'top', start : 'top',
// sets scrollbar opacity // sets scrollbar opacity
opacity : .4, opacity : .4,
// enables always-on mode for the scrollbar // enables always-on mode for the scrollbar
alwaysVisible : false, alwaysVisible : false,
// check if we should hide the scrollbar when user is hovering over // check if we should hide the scrollbar when user is hovering over
disableFadeOut : false, disableFadeOut : false,
// sets visibility of the rail // sets visibility of the rail
railVisible : false, railVisible : false,
// sets rail color // sets rail color
railColor : '#333', railColor : '#333',
// sets rail opacity // sets rail opacity
railOpacity : .2, railOpacity : .2,
// whether we should use jQuery UI Draggable to enable bar dragging // whether we should use jQuery UI Draggable to enable bar dragging
railDraggable : true, railDraggable : true,
// defautlt CSS class of the slimscroll rail // defautlt CSS class of the slimscroll rail
railClass : 'slimScrollRail', railClass : 'slimScrollRail',
// defautlt CSS class of the slimscroll bar // defautlt CSS class of the slimscroll bar
barClass : 'slimScrollBar', barClass : 'slimScrollBar',
// defautlt CSS class of the slimscroll wrapper // defautlt CSS class of the slimscroll wrapper
wrapperClass : 'slimScrollDiv', wrapperClass : 'slimScrollDiv',
// check if mousewheel should scroll the window if we reach top/bottom // check if mousewheel should scroll the window if we reach top/bottom
allowPageScroll : false, allowPageScroll : false,
// scroll amount applied to each mouse wheel step // scroll amount applied to each mouse wheel step
wheelStep : 20, wheelStep : 20,
// scroll amount applied when user is using gestures // scroll amount applied when user is using gestures
touchScrollStep : 200, touchScrollStep : 200,
// sets border radius // sets border radius
borderRadius: '7px', borderRadius: '7px',
// sets border radius of the rail // sets border radius of the rail
railBorderRadius : '7px' railBorderRadius : '7px'
}; };
@ -78,8 +100,8 @@
var offset = me.scrollTop(); var offset = me.scrollTop();
// find bar and rail // find bar and rail
bar = me.parent().find('.' + o.barClass); bar = me.siblings('.' + o.barClass);
rail = me.parent().find('.' + o.railClass); rail = me.siblings('.' + o.railClass);
getBarHeight(); getBarHeight();
@ -93,6 +115,10 @@
var height = me.parent().parent().height(); var height = me.parent().parent().height();
me.parent().css('height', height); me.parent().css('height', height);
me.css('height', height); me.css('height', height);
} else if ('height' in options) {
var h = options.height;
me.parent().css('height', h);
me.css('height', h);
} }
if ('scrollTo' in options) if ('scrollTo' in options)
@ -145,9 +171,7 @@
me.css({ me.css({
overflow: 'hidden', overflow: 'hidden',
width: o.width, width: o.width,
height: o.height, height: o.height
//Fix for IE10
"-ms-touch-action": "none"
}); });
// create scrollbar rail // create scrollbar rail
@ -209,8 +233,7 @@
}); });
$doc.bind("mouseup.slimscroll", function(e) { $doc.bind("mouseup.slimscroll", function(e) {
isDragg = false; isDragg = false;hideBar();
hideBar();
$doc.unbind('.slimscroll'); $doc.unbind('.slimscroll');
}); });
return false; return false;
@ -245,30 +268,6 @@
hideBar(); hideBar();
}); });
if (window.navigator.msPointerEnabled) {
// support for mobile
me.bind('MSPointerDown', function (e, b) {
if (e.originalEvent.targetTouches.length)
{
// record where touch started
touchDif = e.originalEvent.targetTouches[0].pageY;
}
});
me.bind('MSPointerMove', function (e) {
// prevent scrolling the page if necessary
e.originalEvent.preventDefault();
if (e.originalEvent.targetTouches.length)
{
// see how far user swiped
var diff = (touchDif - e.originalEvent.targetTouches[0].pageY) / o.touchScrollStep;
// scroll content
scrollContent(diff, true);
touchDif = e.originalEvent.targetTouches[0].pageY;
}
});
} else {
// support for mobile // support for mobile
me.bind('touchstart', function(e,b){ me.bind('touchstart', function(e,b){
if (e.originalEvent.touches.length) if (e.originalEvent.touches.length)
@ -293,7 +292,6 @@
touchDif = e.originalEvent.touches[0].pageY; touchDif = e.originalEvent.touches[0].pageY;
} }
}); });
}
// set up initial height // set up initial height
getBarHeight(); getBarHeight();
@ -311,30 +309,22 @@
scrollContent($(o.start).position().top, null, true); scrollContent($(o.start).position().top, null, true);
// make sure bar stays hidden // make sure bar stays hidden
if (!o.alwaysVisible) { if (!o.alwaysVisible) { bar.hide(); }
bar.hide();
}
} }
// attach scroll events // attach scroll events
attachWheel(); attachWheel(this);
function _onWheel(e) function _onWheel(e)
{ {
// use mouse wheel only when mouse is over // use mouse wheel only when mouse is over
if (!isOverPanel) { if (!isOverPanel) { return; }
return;
}
var e = e || window.event; var e = e || window.event;
var delta = 0; var delta = 0;
if (e.wheelDelta) { if (e.wheelDelta) { delta = -e.wheelDelta/120; }
delta = -e.wheelDelta / 120; if (e.detail) { delta = e.detail / 3; }
}
if (e.detail) {
delta = e.detail / 3;
}
var target = e.target || e.srcTarget || e.srcElement; var target = e.target || e.srcTarget || e.srcElement;
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) { if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
@ -343,12 +333,8 @@
} }
// stop window scroll // stop window scroll
if (e.preventDefault && !releaseScroll) { if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
e.preventDefault(); if (!releaseScroll) { e.returnValue = false; }
}
if (!releaseScroll) {
e.returnValue = false;
}
} }
function scrollContent(y, isWheel, isJump) function scrollContent(y, isWheel, isJump)
@ -400,12 +386,12 @@
hideBar(); hideBar();
} }
function attachWheel() function attachWheel(target)
{ {
if (window.addEventListener) if (window.addEventListener)
{ {
this.addEventListener('DOMMouseScroll', _onWheel, false); target.addEventListener('DOMMouseScroll', _onWheel, false );
this.addEventListener('mousewheel', _onWheel, false); target.addEventListener('mousewheel', _onWheel, false );
} }
else else
{ {
@ -456,9 +442,7 @@
return; return;
} }
bar.stop(true,true).fadeIn('fast'); bar.stop(true,true).fadeIn('fast');
if (o.railVisible) { if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }
rail.stop(true, true).fadeIn('fast');
}
} }
function hideBar() function hideBar()

16
plugins/slimScroll/jquery.slimscroll.min.js vendored Executable file
View File

@ -0,0 +1,16 @@
/*! 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:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:.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("<div></div>").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("<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=e("<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}),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);

File diff suppressed because one or more lines are too long