1
1
/*!
2
- * perfect-scrollbar v1.3 .0
3
- * (c) 2017 Hyunje Jun
2
+ * perfect-scrollbar v1.4 .0
3
+ * (c) 2018 Hyunje Jun
4
4
* @license MIT
5
5
*/
6
6
'use strict' ;
@@ -30,6 +30,7 @@ var elMatches =
30
30
typeof Element !== 'undefined' &&
31
31
( Element . prototype . matches ||
32
32
Element . prototype . webkitMatchesSelector ||
33
+ Element . prototype . mozMatchesSelector ||
33
34
Element . prototype . msMatchesSelector ) ;
34
35
35
36
function matches ( element , query ) {
@@ -64,6 +65,7 @@ var cls = {
64
65
} ,
65
66
state : {
66
67
focus : 'ps--focus' ,
68
+ clicking : 'ps--clicking' ,
67
69
active : function ( x ) { return ( "ps--active-" + x ) ; } ,
68
70
scrolling : function ( x ) { return ( "ps--scrolling-" + x ) ; } ,
69
71
} ,
@@ -318,6 +320,7 @@ var env = {
318
320
319
321
var updateGeometry = function ( i ) {
320
322
var element = i . element ;
323
+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
321
324
322
325
i . containerWidth = element . clientWidth ;
323
326
i . containerHeight = element . clientHeight ;
@@ -369,7 +372,7 @@ var updateGeometry = function(i) {
369
372
toInt ( i . railYHeight * i . containerHeight / i . contentHeight )
370
373
) ;
371
374
i . scrollbarYTop = toInt (
372
- element . scrollTop *
375
+ roundedScrollTop *
373
376
( i . railYHeight - i . scrollbarYHeight ) /
374
377
( i . contentHeight - i . containerHeight )
375
378
) ;
@@ -416,6 +419,8 @@ function getThumbSize(i, thumbSize) {
416
419
417
420
function updateCss ( element , i ) {
418
421
var xRailOffset = { width : i . railXWidth } ;
422
+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
423
+
419
424
if ( i . isRtl ) {
420
425
xRailOffset . left =
421
426
i . negativeScrollAdjustment +
@@ -426,13 +431,13 @@ function updateCss(element, i) {
426
431
xRailOffset . left = element . scrollLeft ;
427
432
}
428
433
if ( i . isScrollbarXUsingBottom ) {
429
- xRailOffset . bottom = i . scrollbarXBottom - element . scrollTop ;
434
+ xRailOffset . bottom = i . scrollbarXBottom - roundedScrollTop ;
430
435
} else {
431
- xRailOffset . top = i . scrollbarXTop + element . scrollTop ;
436
+ xRailOffset . top = i . scrollbarXTop + roundedScrollTop ;
432
437
}
433
438
set ( i . scrollbarXRail , xRailOffset ) ;
434
439
435
- var yRailOffset = { top : element . scrollTop , height : i . railYHeight } ;
440
+ var yRailOffset = { top : roundedScrollTop , height : i . railYHeight } ;
436
441
if ( i . isScrollbarYUsingRight ) {
437
442
if ( i . isRtl ) {
438
443
yRailOffset . right =
@@ -507,7 +512,8 @@ var dragThumb = function(i) {
507
512
'scrollbarX' ,
508
513
'scrollbarXWidth' ,
509
514
'scrollLeft' ,
510
- 'x' ] ) ;
515
+ 'x' ,
516
+ 'scrollbarXRail' ] ) ;
511
517
bindMouseScrollHandler ( i , [
512
518
'containerHeight' ,
513
519
'contentHeight' ,
@@ -516,7 +522,8 @@ var dragThumb = function(i) {
516
522
'scrollbarY' ,
517
523
'scrollbarYHeight' ,
518
524
'scrollTop' ,
519
- 'y' ] ) ;
525
+ 'y' ,
526
+ 'scrollbarYRail' ] ) ;
520
527
} ;
521
528
522
529
function bindMouseScrollHandler (
@@ -531,6 +538,7 @@ function bindMouseScrollHandler(
531
538
var scrollbarYHeight = ref [ 5 ] ;
532
539
var scrollTop = ref [ 6 ] ;
533
540
var y = ref [ 7 ] ;
541
+ var scrollbarYRail = ref [ 8 ] ;
534
542
535
543
var element = i . element ;
536
544
@@ -550,6 +558,7 @@ function bindMouseScrollHandler(
550
558
551
559
function mouseUpHandler ( ) {
552
560
removeScrollingClass ( i , y ) ;
561
+ i [ scrollbarYRail ] . classList . remove ( cls . state . clicking ) ;
553
562
i . event . unbind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
554
563
}
555
564
@@ -563,6 +572,8 @@ function bindMouseScrollHandler(
563
572
i . event . bind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
564
573
i . event . once ( i . ownerDocument , 'mouseup' , mouseUpHandler ) ;
565
574
575
+ i [ scrollbarYRail ] . classList . add ( cls . state . clicking ) ;
576
+
566
577
e . stopPropagation ( ) ;
567
578
e . preventDefault ( ) ;
568
579
} ) ;
@@ -575,7 +586,7 @@ var keyboard = function(i) {
575
586
var scrollbarFocused = function ( ) { return matches ( i . scrollbarX , ':focus' ) || matches ( i . scrollbarY , ':focus' ) ; } ;
576
587
577
588
function shouldPreventDefault ( deltaX , deltaY ) {
578
- var scrollTop = element . scrollTop ;
589
+ var scrollTop = Math . floor ( element . scrollTop ) ;
579
590
if ( deltaX === 0 ) {
580
591
if ( ! i . scrollbarYActive ) {
581
592
return false ;
@@ -716,12 +727,13 @@ var wheel = function(i) {
716
727
var element = i . element ;
717
728
718
729
function shouldPreventDefault ( deltaX , deltaY ) {
730
+ var roundedScrollTop = Math . floor ( element . scrollTop ) ;
719
731
var isTop = element . scrollTop === 0 ;
720
732
var isBottom =
721
- element . scrollTop + element . offsetHeight === element . scrollHeight ;
733
+ roundedScrollTop + element . offsetHeight === element . scrollHeight ;
722
734
var isLeft = element . scrollLeft === 0 ;
723
735
var isRight =
724
- element . scrollLeft + element . offsetWidth === element . offsetWidth ;
736
+ element . scrollLeft + element . offsetWidth === element . scrollWidth ;
725
737
726
738
var hitsBound ;
727
739
@@ -797,7 +809,7 @@ var wheel = function(i) {
797
809
return true ;
798
810
}
799
811
}
800
- var maxScrollLeft = cursor . scrollLeft - cursor . clientWidth ;
812
+ var maxScrollLeft = cursor . scrollWidth - cursor . clientWidth ;
801
813
if ( maxScrollLeft > 0 ) {
802
814
if (
803
815
! ( cursor . scrollLeft === 0 && deltaX < 0 ) &&
@@ -873,7 +885,7 @@ var touch = function(i) {
873
885
var element = i . element ;
874
886
875
887
function shouldPrevent ( deltaX , deltaY ) {
876
- var scrollTop = element . scrollTop ;
888
+ var scrollTop = Math . floor ( element . scrollTop ) ;
877
889
var scrollLeft = element . scrollLeft ;
878
890
var magnitudeX = Math . abs ( deltaX ) ;
879
891
var magnitudeY = Math . abs ( deltaY ) ;
@@ -1087,7 +1099,7 @@ var defaultSettings = function () { return ({
1087
1099
suppressScrollY : false ,
1088
1100
swipeEasing : true ,
1089
1101
useBothWheelAxes : false ,
1090
- wheelPropagation : false ,
1102
+ wheelPropagation : true ,
1091
1103
wheelSpeed : 1 ,
1092
1104
} ) ; } ;
1093
1105
@@ -1218,7 +1230,7 @@ var PerfectScrollbar = function PerfectScrollbar(element, userSettings) {
1218
1230
1219
1231
this . settings . handlers . forEach ( function ( handlerName ) { return handlers [ handlerName ] ( this$1 ) ; } ) ;
1220
1232
1221
- this . lastScrollTop = element . scrollTop ; // for onScroll only
1233
+ this . lastScrollTop = Math . floor ( element . scrollTop ) ; // for onScroll only
1222
1234
this . lastScrollLeft = element . scrollLeft ; // for onScroll only
1223
1235
this . event . bind ( this . element , 'scroll' , function ( e ) { return this$1 . onScroll ( e ) ; } ) ;
1224
1236
updateGeometry ( this ) ;
@@ -1270,7 +1282,7 @@ PerfectScrollbar.prototype.onScroll = function onScroll (e) {
1270
1282
this . element . scrollLeft - this . lastScrollLeft
1271
1283
) ;
1272
1284
1273
- this . lastScrollTop = this . element . scrollTop ;
1285
+ this . lastScrollTop = Math . floor ( this . element . scrollTop ) ;
1274
1286
this . lastScrollLeft = this . element . scrollLeft ;
1275
1287
} ;
1276
1288
0 commit comments