feat: 通用滚动加载工具

This commit is contained in:
Tim
2025-08-05 18:24:45 +08:00
parent 0957a5c132
commit 3e4b94f1f2
3 changed files with 36 additions and 24 deletions

View File

@@ -0,0 +1,31 @@
import { ref, onMounted, onUnmounted, onActivated, nextTick } from 'vue'
export function useScrollLoadMore(loadMore, offset = 50) {
const savedScrollTop = ref(0)
const handleScroll = () => {
const scrollTop = window.scrollY || document.documentElement.scrollTop
const scrollHeight = document.documentElement.scrollHeight
const windowHeight = window.innerHeight
savedScrollTop.value = scrollTop
if (scrollHeight - (scrollTop + windowHeight) <= offset) {
loadMore()
}
}
onMounted(() => {
window.addEventListener('scroll', handleScroll, { passive: true })
})
onUnmounted(() => {
window.removeEventListener('scroll', handleScroll)
})
onActivated(() => {
nextTick(() => {
window.scrollTo({ top: savedScrollTop.value })
})
})
return { savedScrollTop }
}