优化页面滚动事件

This commit is contained in:
icssoa
2025-08-11 23:48:02 +08:00
parent f2621341a4
commit 407c7b0521
8 changed files with 119 additions and 74 deletions

View File

@@ -1,66 +1,50 @@
import { router, useParent } from "@/cool";
import { computed, watch } from "vue";
type PageScrollCallback = (top: number) => void;
import { router, scroller, useParent } from "@/cool";
class Page {
listeners: PageScrollCallback[] = [];
pageRef: ClPageComponentPublicInstance | null = null;
constructor() {
this.pageRef = useParent<ClPageComponentPublicInstance>("cl-page");
if (this.pageRef != null) {
// TODO: 小程序异常
watch(
computed(() => this.pageRef!.scrollTop),
(top: number) => {
this.listeners.forEach((listener) => {
listener(top);
});
}
);
}
}
/**
* 获取页面路径
* @returns 页面路径
*/
path() {
path = () => {
return router.path();
}
};
/**
* 获取滚动位置
* @returns 滚动位置
*/
getScrollTop(): number {
getScrollTop = (): number => {
return this.pageRef!.scrollTop as number;
}
};
/**
* 滚动到指定位置
* @param top 滚动位置
*/
scrollTo(top: number) {
scrollTo = (top: number) => {
this.pageRef!.scrollTo(top);
}
};
/**
* 回到顶部
*/
scrollToTop() {
scrollToTop = () => {
this.pageRef!.scrollToTop();
}
};
/**
* 监听页面滚动
* @param callback 回调函数
*/
onPageScroll(callback: PageScrollCallback) {
this.listeners.push(callback);
}
onScroll = (callback: (top: number) => void) => {
scroller.on(callback);
};
}
export function usePage(): Page {