dataTable/src/scroll.js

40 lines
1.2 KiB
JavaScript
Raw Normal View History

import { VirtualScroll } from '@web/base';
export const createScrollManager = (container, state, onRenderedListChange) => {
const vs = VirtualScroll({ itemHeight: 40 });
let scrollEl = null;
const refresh = () => {
if (!scrollEl) return;
const virtualContainer = {
clientHeight: scrollEl.clientHeight * 1.6,
scrollTop: scrollEl.scrollTop
};
const res = vs.calc(virtualContainer, state.list);
if (res) {
Object.assign(state, {
prevHeight: res.prevHeight,
postHeight: res.postHeight,
_listStartIndex: res.listStartIndex,
_renderedList: res.renderedList
});
onRenderedListChange?.(res.renderedList.length);
}
};
return {
init: () => {
scrollEl = container.querySelector('.dt-main');
},
reset: (list) => {
state._listStartIndex = 0;
state._renderedList = vs.reset(list, scrollEl || container) || [];
if (state.list === list) {
vs.init(list, refresh);
}
},
refresh,
onScroll: refresh
};
};