element-plus
Version:
A Component Library for Vue 3
54 lines (52 loc) • 1.46 kB
JavaScript
import { ref, unref, watch } from "vue";
//#region ../../packages/components/table-v2/src/composables/use-scrollbar.ts
const useScrollbar = (props, { mainTableRef, leftTableRef, rightTableRef, onMaybeEndReached }) => {
const scrollPos = ref({
scrollLeft: 0,
scrollTop: 0
});
function doScroll(params) {
const { scrollTop } = params;
mainTableRef.value?.scrollTo(params);
leftTableRef.value?.scrollToTop(scrollTop);
rightTableRef.value?.scrollToTop(scrollTop);
}
function scrollTo(params) {
scrollPos.value = params;
doScroll(params);
}
function scrollToTop(scrollTop) {
scrollPos.value.scrollTop = scrollTop;
doScroll(unref(scrollPos));
}
function scrollToLeft(scrollLeft) {
scrollPos.value.scrollLeft = scrollLeft;
mainTableRef.value?.scrollTo?.(unref(scrollPos));
}
function onScroll(params) {
scrollTo(params);
props.onScroll?.(params);
}
function onVerticalScroll({ scrollTop }) {
const { scrollTop: currentScrollTop } = unref(scrollPos);
if (scrollTop !== currentScrollTop) scrollToTop(scrollTop);
}
function scrollToRow(row, strategy = "auto") {
mainTableRef.value?.scrollToRow(row, strategy);
}
watch(() => unref(scrollPos).scrollTop, (cur, prev) => {
if (cur > prev) onMaybeEndReached();
});
return {
scrollPos,
scrollTo,
scrollToLeft,
scrollToTop,
scrollToRow,
onScroll,
onVerticalScroll
};
};
//#endregion
export { useScrollbar };
//# sourceMappingURL=use-scrollbar.mjs.map