11/*!
2- * perfect-scrollbar v1.3 .0
3- * (c) 2017 Hyunje Jun
2+ * perfect-scrollbar v1.4 .0
3+ * (c) 2018 Hyunje Jun
44 * @license MIT
55 */
66'use strict' ;
@@ -30,6 +30,7 @@ var elMatches =
3030 typeof Element !== 'undefined' &&
3131 ( Element . prototype . matches ||
3232 Element . prototype . webkitMatchesSelector ||
33+ Element . prototype . mozMatchesSelector ||
3334 Element . prototype . msMatchesSelector ) ;
3435
3536function matches ( element , query ) {
@@ -64,6 +65,7 @@ var cls = {
6465 } ,
6566 state : {
6667 focus : 'ps--focus' ,
68+ clicking : 'ps--clicking' ,
6769 active : function ( x ) { return ( "ps--active-" + x ) ; } ,
6870 scrolling : function ( x ) { return ( "ps--scrolling-" + x ) ; } ,
6971 } ,
@@ -318,6 +320,7 @@ var env = {
318320
319321var updateGeometry = function ( i ) {
320322 var element = i . element ;
323+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
321324
322325 i . containerWidth = element . clientWidth ;
323326 i . containerHeight = element . clientHeight ;
@@ -369,7 +372,7 @@ var updateGeometry = function(i) {
369372 toInt ( i . railYHeight * i . containerHeight / i . contentHeight )
370373 ) ;
371374 i . scrollbarYTop = toInt (
372- element . scrollTop *
375+ roundedScrollTop *
373376 ( i . railYHeight - i . scrollbarYHeight ) /
374377 ( i . contentHeight - i . containerHeight )
375378 ) ;
@@ -416,6 +419,8 @@ function getThumbSize(i, thumbSize) {
416419
417420function updateCss ( element , i ) {
418421 var xRailOffset = { width : i . railXWidth } ;
422+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
423+
419424 if ( i . isRtl ) {
420425 xRailOffset . left =
421426 i . negativeScrollAdjustment +
@@ -426,13 +431,13 @@ function updateCss(element, i) {
426431 xRailOffset . left = element . scrollLeft ;
427432 }
428433 if ( i . isScrollbarXUsingBottom ) {
429- xRailOffset . bottom = i . scrollbarXBottom - element . scrollTop ;
434+ xRailOffset . bottom = i . scrollbarXBottom - roundedScrollTop ;
430435 } else {
431- xRailOffset . top = i . scrollbarXTop + element . scrollTop ;
436+ xRailOffset . top = i . scrollbarXTop + roundedScrollTop ;
432437 }
433438 set ( i . scrollbarXRail , xRailOffset ) ;
434439
435- var yRailOffset = { top : element . scrollTop , height : i . railYHeight } ;
440+ var yRailOffset = { top : roundedScrollTop , height : i . railYHeight } ;
436441 if ( i . isScrollbarYUsingRight ) {
437442 if ( i . isRtl ) {
438443 yRailOffset . right =
@@ -507,7 +512,8 @@ var dragThumb = function(i) {
507512 'scrollbarX' ,
508513 'scrollbarXWidth' ,
509514 'scrollLeft' ,
510- 'x' ] ) ;
515+ 'x' ,
516+ 'scrollbarXRail' ] ) ;
511517 bindMouseScrollHandler ( i , [
512518 'containerHeight' ,
513519 'contentHeight' ,
@@ -516,7 +522,8 @@ var dragThumb = function(i) {
516522 'scrollbarY' ,
517523 'scrollbarYHeight' ,
518524 'scrollTop' ,
519- 'y' ] ) ;
525+ 'y' ,
526+ 'scrollbarYRail' ] ) ;
520527} ;
521528
522529function bindMouseScrollHandler (
@@ -531,6 +538,7 @@ function bindMouseScrollHandler(
531538 var scrollbarYHeight = ref [ 5 ] ;
532539 var scrollTop = ref [ 6 ] ;
533540 var y = ref [ 7 ] ;
541+ var scrollbarYRail = ref [ 8 ] ;
534542
535543 var element = i . element ;
536544
@@ -550,6 +558,7 @@ function bindMouseScrollHandler(
550558
551559 function mouseUpHandler ( ) {
552560 removeScrollingClass ( i , y ) ;
561+ i [ scrollbarYRail ] . classList . remove ( cls . state . clicking ) ;
553562 i . event . unbind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
554563 }
555564
@@ -563,6 +572,8 @@ function bindMouseScrollHandler(
563572 i . event . bind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
564573 i . event . once ( i . ownerDocument , 'mouseup' , mouseUpHandler ) ;
565574
575+ i [ scrollbarYRail ] . classList . add ( cls . state . clicking ) ;
576+
566577 e . stopPropagation ( ) ;
567578 e . preventDefault ( ) ;
568579 } ) ;
@@ -575,7 +586,7 @@ var keyboard = function(i) {
575586 var scrollbarFocused = function ( ) { return matches ( i . scrollbarX , ':focus' ) || matches ( i . scrollbarY , ':focus' ) ; } ;
576587
577588 function shouldPreventDefault ( deltaX , deltaY ) {
578- var scrollTop = element . scrollTop ;
589+ var scrollTop = Math . floor ( element . scrollTop ) ;
579590 if ( deltaX === 0 ) {
580591 if ( ! i . scrollbarYActive ) {
581592 return false ;
@@ -716,12 +727,13 @@ var wheel = function(i) {
716727 var element = i . element ;
717728
718729 function shouldPreventDefault ( deltaX , deltaY ) {
730+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
719731 var isTop = element . scrollTop === 0 ;
720732 var isBottom =
721- element . scrollTop + element . offsetHeight === element . scrollHeight ;
733+ roundedScrollTop + element . offsetHeight === element . scrollHeight ;
722734 var isLeft = element . scrollLeft === 0 ;
723735 var isRight =
724- element . scrollLeft + element . offsetWidth === element . offsetWidth ;
736+ element . scrollLeft + element . offsetWidth === element . scrollWidth ;
725737
726738 var hitsBound ;
727739
@@ -797,7 +809,7 @@ var wheel = function(i) {
797809 return true ;
798810 }
799811 }
800- var maxScrollLeft = cursor . scrollLeft - cursor . clientWidth ;
812+ var maxScrollLeft = cursor . scrollWidth - cursor . clientWidth ;
801813 if ( maxScrollLeft > 0 ) {
802814 if (
803815 ! ( cursor . scrollLeft === 0 && deltaX < 0 ) &&
@@ -873,7 +885,7 @@ var touch = function(i) {
873885 var element = i . element ;
874886
875887 function shouldPrevent ( deltaX , deltaY ) {
876- var scrollTop = element . scrollTop ;
888+ var scrollTop = Math . floor ( element . scrollTop ) ;
877889 var scrollLeft = element . scrollLeft ;
878890 var magnitudeX = Math . abs ( deltaX ) ;
879891 var magnitudeY = Math . abs ( deltaY ) ;
@@ -1087,7 +1099,7 @@ var defaultSettings = function () { return ({
10871099 suppressScrollY : false ,
10881100 swipeEasing : true ,
10891101 useBothWheelAxes : false ,
1090- wheelPropagation : false ,
1102+ wheelPropagation : true ,
10911103 wheelSpeed : 1 ,
10921104} ) ; } ;
10931105
@@ -1218,7 +1230,7 @@ var PerfectScrollbar = function PerfectScrollbar(element, userSettings) {
12181230
12191231 this . settings . handlers . forEach ( function ( handlerName ) { return handlers [ handlerName ] ( this$1 ) ; } ) ;
12201232
1221- this . lastScrollTop = element . scrollTop ; // for onScroll only
1233+ this . lastScrollTop = Math . floor ( element . scrollTop ) ; // for onScroll only
12221234 this . lastScrollLeft = element . scrollLeft ; // for onScroll only
12231235 this . event . bind ( this . element , 'scroll' , function ( e ) { return this$1 . onScroll ( e ) ; } ) ;
12241236 updateGeometry ( this ) ;
@@ -1270,7 +1282,7 @@ PerfectScrollbar.prototype.onScroll = function onScroll (e) {
12701282 this . element . scrollLeft - this . lastScrollLeft
12711283 ) ;
12721284
1273- this . lastScrollTop = this . element . scrollTop ;
1285+ this . lastScrollTop = Math . floor ( this . element . scrollTop ) ;
12741286 this . lastScrollLeft = this . element . scrollLeft ;
12751287} ;
12761288
0 commit comments