diff --git a/src/components/InfiniteLoading.vue b/src/components/InfiniteLoading.vue index 883c4f0..3e0ee34 100644 --- a/src/components/InfiniteLoading.vue +++ b/src/components/InfiniteLoading.vue @@ -118,6 +118,10 @@ export default { }, }, props: { + keepScrollTop: { + type: Boolean, + default: false, + }, distance: { type: Number, default: config.props.distance, @@ -173,6 +177,13 @@ export default { this.$nextTick(this.attemptLoad.bind(null, true)); } + if (this.keepScrollTop) { + const scrollTop = this.getScrollParentOffset(); + this.$nextTick(() => { + this.setScrollParentOffset(scrollTop); + }); + } + if (!ev || ev.target !== this) { warn(WARNINGS.STATE_CHANGER); } @@ -329,6 +340,19 @@ export default { return result || this.getScrollParent(elm.parentNode); }, + getScrollParentOffset() { + const scrollParent = this.getScrollParent(); + return (scrollParent === window + ? document.documentElement.scrollTop + : scrollParent.scrollTop + ); + }, + setScrollParentOffset(scrollTop) { + (this.scrollParent === window + ? document.documentElement + : this.scrollParent + ).scrollTop = scrollTop; + }, }, destroyed() { /* istanbul ignore else */