git 仓库地址:https://gitee.com/xiaoli-account/vue3_ts.git
[参考文档]
(https://cn.vuejs.org/guide/reusability/custom-directives.html#custom-directives)
/*** 滚动事件处理函数,检测是否滚动到底部* 使用防抖函数包装,防止重复调用接口*/const onScrollDebounce = debounce(function () {const scrollBox = scrollBoxRef.value;if (!scrollBox) return;const { scrollTop, clientHeight, scrollHeight } = scrollBox;// 判断是否滚动到底部(考虑阈值)if (scrollTop + clientHeight + props.threshold >= scrollHeight) {// console.log("判断是否滚动到底部(考虑阈值)");// 如果正在加载或已完成加载,则不处理if (loading.value || finished.value) return;loadMore();}}, props.throttleDelay); // 100ms的防抖延迟,确保节流和防抖都能发挥作用function useListener(open) {const scrollBox = scrollBoxRef.value;if (!scrollBox) return;if (open) {// console.log("创建滚动监听", scrollBox);scrollBox.addEventListener("scroll", onScroll, { passive: true });} else {// console.log("移除滚动监听", scrollBox);scrollBox.removeEventListener("scroll", onScroll, { passive: true });// 清理防抖定时器if (debounceTimer) {clearTimeout(debounceTimer);debounceTimer = null;}}}