From 43557b1997f4248ebe853734d897ea442f77dd83 Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期日, 12 五月 2024 08:01:22 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/tool/scroll-paging.vue | 49 +++++++++++++++++++++++++++++++------------------ 1 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/components/tool/scroll-paging.vue b/src/components/tool/scroll-paging.vue index c60265f..41b2e10 100644 --- a/src/components/tool/scroll-paging.vue +++ b/src/components/tool/scroll-paging.vue @@ -1,5 +1,5 @@ <template> - <div class="scroll-pagination" ref="content" @scroll="scrollFn"> + <div class="scroll-pagination" ref="content" @scroll="onScroll"> <slot></slot> <el-button v-if="isLoding" @@ -30,13 +30,19 @@ isLoding: false, } }, + created(){ + // 闃叉姈 + this.onScroll = this.debounce(this.scrollFn,2000); + // 鑺傛祦 + // this.onScroll = this.throttle(this.scrollFn,1000); + }, mounted(){ - window.addEventListener("scroll", this.throttle(this.scrollFn, 20000)); }, methods: { + onScroll(){}, scrollFn() { let content = this.$refs.content - if (content.scrollTop + content.clientHeight >= content.scrollHeight) { + if (content.scrollTop + content.clientHeight+1 >= content.scrollHeight) { if(!this.finishLoding){ this.loadMore() }else{ @@ -47,30 +53,37 @@ loadMore(){ if (this.isLoding) return this.isLoding = true - // Simulate loading data (replace with your own API call) setTimeout(() => { this.$emit('load') this.isLoding = false }, 1000) }, - throttle(fn, wait) { - // 灏佽鍑芥暟杩涜鑺傛祦 - var timer = null; + debounce(func, delay) { + let timer = null; return function () { - var context = this; - var args = arguments; - if (!timer) { - timer = setTimeout(function () { - fn.apply(context, args); - timer = null; - }, wait); + if (timer) { + clearTimeout(timer); + timer = null; } + timer = setTimeout(() => { + func(...arguments); + }, delay); }; }, - }, - destroyed() { - window.removeEventListener("scroll", this.throttle(), false); - }, + throttle(func, delay) { + let time = null; + return function () { + let args = Array.from(arguments); + if (time === null) { + time = setTimeout(() => { + func(...args); + clearTimeout(time); + time = null; + }, delay); + } + }; + } + } } </script> -- Gitblit v1.9.3