@@ -582,8 +582,21 @@ if (typeof window !== 'undefined') {
582
582
} catch ( e ) { }
583
583
}
584
584
585
- // @vue /component
586
- var Scroller = {
585
+ var uid = 0 ;
586
+
587
+ var RecycleScroller = { render : function render ( ) {
588
+ var _vm = this ; var _h = _vm . $createElement ; var _c = _vm . _self . _c || _h ; return _c ( 'div' , { directives : [ { name : "observe-visibility" , rawName : "v-observe-visibility" , value : _vm . handleVisibilityChange , expression : "handleVisibilityChange" } ] , staticClass : "vue-recycle-scroller" , class : { ready : _vm . ready , 'page-mode' : _vm . pageMode } , on : { "&scroll" : function scroll ( $event ) {
589
+ return _vm . handleScroll ( $event ) ;
590
+ } } } , [ _vm . _t ( "before-container" ) , _vm . _v ( " " ) , _c ( 'div' , { ref : "wrapper" , staticClass : "vue-recycle-scroller__item-wrapper" , style : { height : _vm . totalHeight + 'px' } } , _vm . _l ( _vm . pool , function ( view ) {
591
+ return _c ( 'div' , { key : view . nr . id , staticClass : "vue-recycle-scroller__item-view" , class : { hover : _vm . hoverKey === view . nr . key } , style : _vm . ready ? { transform : 'translateY(' + view . top + 'px)' } : null , on : { "mouseenter" : function mouseenter ( $event ) {
592
+ _vm . hoverKey = view . nr . key ;
593
+ } , "mouseleave" : function mouseleave ( $event ) {
594
+ _vm . hoverKey = null ;
595
+ } } } , [ _vm . _t ( "default" , null , { "item" : view . item , "index" : view . nr . index , "active" : view . nr . used } ) ] , 2 ) ;
596
+ } ) , 0 ) , _vm . _v ( " " ) , _vm . _t ( "after-container" ) , _vm . _v ( " " ) , _c ( 'ResizeObserver' , { on : { "notify" : _vm . handleResize } } ) ] , 2 ) ;
597
+ } , staticRenderFns : [ ] ,
598
+ name : 'RecycleScroller' ,
599
+
587
600
components : {
588
601
ResizeObserver : ResizeObserver
589
602
} ,
@@ -593,6 +606,7 @@ var Scroller = {
593
606
} ,
594
607
595
608
props : {
609
+
596
610
items : {
597
611
type : Array ,
598
612
required : true
@@ -644,6 +658,16 @@ var Scroller = {
644
658
}
645
659
} ,
646
660
661
+ data : function data ( ) {
662
+ return {
663
+ pool : [ ] ,
664
+ totalHeight : 0 ,
665
+ ready : false ,
666
+ hoverKey : null
667
+ } ;
668
+ } ,
669
+
670
+
647
671
computed : {
648
672
heights : function heights ( ) {
649
673
if ( this . itemHeight === null ) {
@@ -666,124 +690,6 @@ var Scroller = {
666
690
}
667
691
} ,
668
692
669
- beforeDestroy : function beforeDestroy ( ) {
670
- this . removeListeners ( ) ;
671
- } ,
672
-
673
-
674
- methods : {
675
- getListenerTarget : function getListenerTarget ( ) {
676
- var target = scrollparent ( this . $el ) ;
677
- // Fix global scroll target for Chrome and Safari
678
- if ( target === window . document . documentElement || target === window . document . body ) {
679
- target = window ;
680
- }
681
- return target ;
682
- } ,
683
- getScroll : function getScroll ( ) {
684
- var el = this . $el ;
685
- // const wrapper = this.$refs.wrapper
686
- var scrollState = void 0 ;
687
-
688
- if ( this . pageMode ) {
689
- var size = el . getBoundingClientRect ( ) ;
690
- var top = - size . top ;
691
- var height = window . innerHeight ;
692
- if ( top < 0 ) {
693
- height += top ;
694
- top = 0 ;
695
- }
696
- if ( top + height > size . height ) {
697
- height = size . height - top ;
698
- }
699
- scrollState = {
700
- top : top ,
701
- bottom : top + height
702
- } ;
703
- } else {
704
- scrollState = {
705
- top : el . scrollTop ,
706
- bottom : el . scrollTop + el . clientHeight
707
- } ;
708
- }
709
-
710
- return scrollState ;
711
- } ,
712
- applyPageMode : function applyPageMode ( ) {
713
- if ( this . pageMode ) {
714
- this . addListeners ( ) ;
715
- } else {
716
- this . removeListeners ( ) ;
717
- }
718
- } ,
719
- addListeners : function addListeners ( ) {
720
- this . listenerTarget = this . getListenerTarget ( ) ;
721
- this . listenerTarget . addEventListener ( 'scroll' , this . handleScroll , supportsPassive ? {
722
- passive : true
723
- } : false ) ;
724
- this . listenerTarget . addEventListener ( 'resize' , this . handleResize ) ;
725
- } ,
726
- removeListeners : function removeListeners ( ) {
727
- if ( ! this . listenerTarget ) {
728
- return ;
729
- }
730
-
731
- this . listenerTarget . removeEventListener ( 'scroll' , this . handleScroll ) ;
732
- this . listenerTarget . removeEventListener ( 'resize' , this . handleResize ) ;
733
-
734
- this . listenerTarget = null ;
735
- } ,
736
- scrollToItem : function scrollToItem ( index ) {
737
- var scrollTop = void 0 ;
738
- if ( this . itemHeight === null ) {
739
- scrollTop = index > 0 ? this . heights [ index - 1 ] . accumulator : 0 ;
740
- } else {
741
- scrollTop = index * this . itemHeight ;
742
- }
743
- this . scrollToPosition ( scrollTop ) ;
744
- } ,
745
- scrollToPosition : function scrollToPosition ( position ) {
746
- this . $el . scrollTop = position ;
747
- } ,
748
- itemsLimitError : function itemsLimitError ( ) {
749
- var _this = this ;
750
-
751
- setTimeout ( function ( ) {
752
- console . log ( 'It seems the scroller element isn\'t scrolling, so it tries to render all the items at once.' , 'Scroller:' , _this . $el ) ;
753
- console . log ( 'Make sure the scroller has a fixed height and \'overflow-y\' set to \'auto\' so it can scroll correctly and only render the items visible in the scroll viewport.' ) ;
754
- } ) ;
755
- throw new Error ( 'Rendered items limit reached' ) ;
756
- }
757
- }
758
- } ;
759
-
760
- var uid = 0 ;
761
-
762
- var RecycleScroller = { render : function render ( ) {
763
- var _vm = this ; var _h = _vm . $createElement ; var _c = _vm . _self . _c || _h ; return _c ( 'div' , { directives : [ { name : "observe-visibility" , rawName : "v-observe-visibility" , value : _vm . handleVisibilityChange , expression : "handleVisibilityChange" } ] , staticClass : "vue-recycle-scroller" , class : { ready : _vm . ready , 'page-mode' : _vm . pageMode } , on : { "&scroll" : function scroll ( $event ) {
764
- return _vm . handleScroll ( $event ) ;
765
- } } } , [ _vm . _t ( "before-container" ) , _vm . _v ( " " ) , _c ( 'div' , { ref : "wrapper" , staticClass : "vue-recycle-scroller__item-wrapper" , style : { height : _vm . totalHeight + 'px' } } , _vm . _l ( _vm . pool , function ( view ) {
766
- return _c ( 'div' , { key : view . nr . id , staticClass : "vue-recycle-scroller__item-view" , class : { hover : _vm . hoverKey === view . nr . key } , style : _vm . ready ? { transform : 'translateY(' + view . top + 'px)' } : null , on : { "mouseenter" : function mouseenter ( $event ) {
767
- _vm . hoverKey = view . nr . key ;
768
- } , "mouseleave" : function mouseleave ( $event ) {
769
- _vm . hoverKey = null ;
770
- } } } , [ _vm . _t ( "default" , null , { item : view . item , index : view . nr . index , active : view . nr . used } ) ] , 2 ) ;
771
- } ) , 0 ) , _vm . _v ( " " ) , _vm . _t ( "after-container" ) , _vm . _v ( " " ) , _c ( 'ResizeObserver' , { on : { "notify" : _vm . handleResize } } ) ] , 2 ) ;
772
- } , staticRenderFns : [ ] ,
773
- name : 'RecycleScroller' ,
774
-
775
- mixins : [ Scroller ] ,
776
-
777
- data : function data ( ) {
778
- return {
779
- pool : [ ] ,
780
- totalHeight : 0 ,
781
- ready : false ,
782
- hoverKey : null
783
- } ;
784
- } ,
785
-
786
-
787
693
watch : {
788
694
items : function items ( ) {
789
695
this . updateVisibleItems ( true ) ;
@@ -823,6 +729,9 @@ var RecycleScroller = { render: function render() {
823
729
_this . ready = true ;
824
730
} ) ;
825
731
} ,
732
+ beforeDestroy : function beforeDestroy ( ) {
733
+ this . removeListeners ( ) ;
734
+ } ,
826
735
827
736
828
737
methods : {
@@ -1092,6 +1001,88 @@ var RecycleScroller = { render: function render() {
1092
1001
return {
1093
1002
continuous : continuous
1094
1003
} ;
1004
+ } ,
1005
+ getListenerTarget : function getListenerTarget ( ) {
1006
+ var target = scrollparent ( this . $el ) ;
1007
+ // Fix global scroll target for Chrome and Safari
1008
+ if ( target === window . document . documentElement || target === window . document . body ) {
1009
+ target = window ;
1010
+ }
1011
+ return target ;
1012
+ } ,
1013
+ getScroll : function getScroll ( ) {
1014
+ var el = this . $el ;
1015
+ // const wrapper = this.$refs.wrapper
1016
+ var scrollState = void 0 ;
1017
+
1018
+ if ( this . pageMode ) {
1019
+ var size = el . getBoundingClientRect ( ) ;
1020
+ var top = - size . top ;
1021
+ var height = window . innerHeight ;
1022
+ if ( top < 0 ) {
1023
+ height += top ;
1024
+ top = 0 ;
1025
+ }
1026
+ if ( top + height > size . height ) {
1027
+ height = size . height - top ;
1028
+ }
1029
+ scrollState = {
1030
+ top : top ,
1031
+ bottom : top + height
1032
+ } ;
1033
+ } else {
1034
+ scrollState = {
1035
+ top : el . scrollTop ,
1036
+ bottom : el . scrollTop + el . clientHeight
1037
+ } ;
1038
+ }
1039
+
1040
+ return scrollState ;
1041
+ } ,
1042
+ applyPageMode : function applyPageMode ( ) {
1043
+ if ( this . pageMode ) {
1044
+ this . addListeners ( ) ;
1045
+ } else {
1046
+ this . removeListeners ( ) ;
1047
+ }
1048
+ } ,
1049
+ addListeners : function addListeners ( ) {
1050
+ this . listenerTarget = this . getListenerTarget ( ) ;
1051
+ this . listenerTarget . addEventListener ( 'scroll' , this . handleScroll , supportsPassive ? {
1052
+ passive : true
1053
+ } : false ) ;
1054
+ this . listenerTarget . addEventListener ( 'resize' , this . handleResize ) ;
1055
+ } ,
1056
+ removeListeners : function removeListeners ( ) {
1057
+ if ( ! this . listenerTarget ) {
1058
+ return ;
1059
+ }
1060
+
1061
+ this . listenerTarget . removeEventListener ( 'scroll' , this . handleScroll ) ;
1062
+ this . listenerTarget . removeEventListener ( 'resize' , this . handleResize ) ;
1063
+
1064
+ this . listenerTarget = null ;
1065
+ } ,
1066
+ scrollToItem : function scrollToItem ( index ) {
1067
+ var scrollTop = void 0 ;
1068
+ if ( this . itemHeight === null ) {
1069
+ scrollTop = index > 0 ? this . heights [ index - 1 ] . accumulator : 0 ;
1070
+ } else {
1071
+ scrollTop = index * this . itemHeight ;
1072
+ }
1073
+ this . scrollToPosition ( scrollTop ) ;
1074
+ } ,
1075
+ scrollToPosition : function scrollToPosition ( position ) {
1076
+ this . $el . scrollTop = position ;
1077
+ } ,
1078
+ itemsLimitError : function itemsLimitError ( ) {
1079
+ var _this4 = this ;
1080
+
1081
+ setTimeout ( function ( ) {
1082
+ console . log ( 'It seems the scroller element isn\'t scrolling, so it tries to render all the items at once.' , 'Scroller:' , _this4 . $el ) ;
1083
+ console . log ( 'Make sure the scroller has a fixed height and \'overflow-y\' set to \'auto\' so it can scroll correctly and only render the items visible in the scroll viewport.' ) ;
1084
+ } ) ;
1085
+ throw new Error ( 'Rendered items limit reached' ) ;
1095
1086
}
1096
1087
}
1097
1088
} ;
@@ -1107,7 +1098,7 @@ var DynamicScroller = { render: function render() {
1107
1098
active : active ,
1108
1099
itemWithHeight : itemWithHeight
1109
1100
} ) ] ;
1110
- } } ] ) } , 'RecycleScroller' , _vm . $attrs , false ) , _vm . listeners ) , [ _c ( 'template' , { slot : "before-container" } , [ _vm . _t ( "before-container" ) ] , 2 ) , _vm . _v ( " " ) , _c ( 'template' , { slot : "after-container" } , [ _vm . _t ( "after-container" ) ] , 2 ) ] , 2 ) ;
1101
+ } } ] , true ) } , 'RecycleScroller' , _vm . $attrs , false ) , _vm . listeners ) , [ _vm . _v ( " " ) , _c ( 'template' , { slot : "before-container" } , [ _vm . _t ( "before-container" ) ] , 2 ) , _vm . _v ( " " ) , _c ( 'template' , { slot : "after-container" } , [ _vm . _t ( "after-container" ) ] , 2 ) ] , 2 ) ;
1111
1102
} , staticRenderFns : [ ] ,
1112
1103
name : 'DynamicScroller' ,
1113
1104
@@ -1320,7 +1311,7 @@ var DynamicScrollerItem = {
1320
1311
}
1321
1312
} ,
1322
1313
active : function active ( value ) {
1323
- if ( value && this . $_pendingVScrollUpdate ) {
1314
+ if ( value && this . $_pendingVScrollUpdate === this . id ) {
1324
1315
this . updateSize ( ) ;
1325
1316
}
1326
1317
}
@@ -1331,7 +1322,7 @@ var DynamicScrollerItem = {
1331
1322
1332
1323
if ( this . $isServer ) return ;
1333
1324
1334
- this . $_forceNextVScrollUpdate = false ;
1325
+ this . $_forceNextVScrollUpdate = null ;
1335
1326
this . updateWatchData ( ) ;
1336
1327
1337
1328
var _loop = function _loop ( k ) {
@@ -1361,16 +1352,16 @@ var DynamicScrollerItem = {
1361
1352
methods : {
1362
1353
updateSize : function updateSize ( ) {
1363
1354
if ( this . active && this . vscrollData . active ) {
1364
- if ( ! this . $_pendingSizeUpdate ) {
1365
- this . $_pendingSizeUpdate = true ;
1366
- this . $_forceNextVScrollUpdate = false ;
1367
- this . $_pendingVScrollUpdate = false ;
1355
+ if ( this . $_pendingSizeUpdate !== this . id ) {
1356
+ this . $_pendingSizeUpdate = this . id ;
1357
+ this . $_forceNextVScrollUpdate = null ;
1358
+ this . $_pendingVScrollUpdate = null ;
1368
1359
if ( this . active && this . vscrollData . active ) {
1369
1360
this . computeSize ( this . id ) ;
1370
1361
}
1371
1362
}
1372
1363
} else {
1373
- this . $_forceNextVScrollUpdate = true ;
1364
+ this . $_forceNextVScrollUpdate = this . id ;
1374
1365
}
1375
1366
} ,
1376
1367
getSize : function getSize ( ) {
@@ -1394,9 +1385,9 @@ var DynamicScrollerItem = {
1394
1385
var force = _ref . force ;
1395
1386
1396
1387
if ( ! this . active && force ) {
1397
- this . $_pendingVScrollUpdate = true ;
1388
+ this . $_pendingVScrollUpdate = this . id ;
1398
1389
}
1399
- if ( this . $_forceNextVScrollUpdate || force || ! this . height ) {
1390
+ if ( this . $_forceNextVScrollUpdate === this . id || force || ! this . height ) {
1400
1391
this . updateSize ( ) ;
1401
1392
}
1402
1393
} ,
@@ -1418,7 +1409,7 @@ var DynamicScrollerItem = {
1418
1409
if ( _this3 . emitResize ) _this3 . $emit ( 'resize' , _this3 . id ) ;
1419
1410
}
1420
1411
}
1421
- _this3 . $_pendingSizeUpdate = false ;
1412
+ _this3 . $_pendingSizeUpdate = null ;
1422
1413
} ) ;
1423
1414
}
1424
1415
} ,
@@ -1530,7 +1521,7 @@ function registerComponents(Vue$$1, prefix) {
1530
1521
1531
1522
var plugin = {
1532
1523
// eslint-disable-next-line no-undef
1533
- version : "1.0.0-beta.5 " ,
1524
+ version : "1.0.0-beta.6 " ,
1534
1525
install : function install ( Vue$$1 , options ) {
1535
1526
var finalOptions = Object . assign ( { } , {
1536
1527
installComponents : true ,
0 commit comments