Skip to content

Commit 6e4d357

Browse files
author
Guillaume Chau
committed
chore: v1.0.0-beta.6
1 parent 3a4fb02 commit 6e4d357

File tree

4 files changed

+248
-266
lines changed

4 files changed

+248
-266
lines changed

dist/vue-virtual-scroller.esm.js

Lines changed: 123 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,21 @@ if (typeof window !== 'undefined') {
582582
} catch (e) {}
583583
}
584584

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+
587600
components: {
588601
ResizeObserver: ResizeObserver
589602
},
@@ -593,6 +606,7 @@ var Scroller = {
593606
},
594607

595608
props: {
609+
596610
items: {
597611
type: Array,
598612
required: true
@@ -644,6 +658,16 @@ var Scroller = {
644658
}
645659
},
646660

661+
data: function data() {
662+
return {
663+
pool: [],
664+
totalHeight: 0,
665+
ready: false,
666+
hoverKey: null
667+
};
668+
},
669+
670+
647671
computed: {
648672
heights: function heights() {
649673
if (this.itemHeight === null) {
@@ -666,124 +690,6 @@ var Scroller = {
666690
}
667691
},
668692

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-
787693
watch: {
788694
items: function items() {
789695
this.updateVisibleItems(true);
@@ -823,6 +729,9 @@ var RecycleScroller = { render: function render() {
823729
_this.ready = true;
824730
});
825731
},
732+
beforeDestroy: function beforeDestroy() {
733+
this.removeListeners();
734+
},
826735

827736

828737
methods: {
@@ -1092,6 +1001,88 @@ var RecycleScroller = { render: function render() {
10921001
return {
10931002
continuous: continuous
10941003
};
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');
10951086
}
10961087
}
10971088
};
@@ -1107,7 +1098,7 @@ var DynamicScroller = { render: function render() {
11071098
active: active,
11081099
itemWithHeight: itemWithHeight
11091100
})];
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);
11111102
}, staticRenderFns: [],
11121103
name: 'DynamicScroller',
11131104

@@ -1320,7 +1311,7 @@ var DynamicScrollerItem = {
13201311
}
13211312
},
13221313
active: function active(value) {
1323-
if (value && this.$_pendingVScrollUpdate) {
1314+
if (value && this.$_pendingVScrollUpdate === this.id) {
13241315
this.updateSize();
13251316
}
13261317
}
@@ -1331,7 +1322,7 @@ var DynamicScrollerItem = {
13311322

13321323
if (this.$isServer) return;
13331324

1334-
this.$_forceNextVScrollUpdate = false;
1325+
this.$_forceNextVScrollUpdate = null;
13351326
this.updateWatchData();
13361327

13371328
var _loop = function _loop(k) {
@@ -1361,16 +1352,16 @@ var DynamicScrollerItem = {
13611352
methods: {
13621353
updateSize: function updateSize() {
13631354
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;
13681359
if (this.active && this.vscrollData.active) {
13691360
this.computeSize(this.id);
13701361
}
13711362
}
13721363
} else {
1373-
this.$_forceNextVScrollUpdate = true;
1364+
this.$_forceNextVScrollUpdate = this.id;
13741365
}
13751366
},
13761367
getSize: function getSize() {
@@ -1394,9 +1385,9 @@ var DynamicScrollerItem = {
13941385
var force = _ref.force;
13951386

13961387
if (!this.active && force) {
1397-
this.$_pendingVScrollUpdate = true;
1388+
this.$_pendingVScrollUpdate = this.id;
13981389
}
1399-
if (this.$_forceNextVScrollUpdate || force || !this.height) {
1390+
if (this.$_forceNextVScrollUpdate === this.id || force || !this.height) {
14001391
this.updateSize();
14011392
}
14021393
},
@@ -1418,7 +1409,7 @@ var DynamicScrollerItem = {
14181409
if (_this3.emitResize) _this3.$emit('resize', _this3.id);
14191410
}
14201411
}
1421-
_this3.$_pendingSizeUpdate = false;
1412+
_this3.$_pendingSizeUpdate = null;
14221413
});
14231414
}
14241415
},
@@ -1530,7 +1521,7 @@ function registerComponents(Vue$$1, prefix) {
15301521

15311522
var plugin = {
15321523
// eslint-disable-next-line no-undef
1533-
version: "1.0.0-beta.5",
1524+
version: "1.0.0-beta.6",
15341525
install: function install(Vue$$1, options) {
15351526
var finalOptions = Object.assign({}, {
15361527
installComponents: true,

0 commit comments

Comments
 (0)