UNPKG

@opensig/opendesign

Version:

54 lines (53 loc) 1.38 kB
function createAxisSelector(isHorizontal) { const h = () => isHorizontal.value; return { getScroll: (el) => h() ? el.scrollLeft : el.scrollTop, setScroll: (el, val) => { if (h()) { el.scrollLeft = val; } else { el.scrollTop = val; } }, getAxisSize: (el) => h() ? el.offsetWidth : el.offsetHeight, getScrollSize: (el) => h() ? el.scrollWidth : el.scrollHeight, getClientSize: (el) => h() ? el.clientWidth : el.clientHeight, scrollToPos: (el, pos, behavior) => { el.scrollTo({ [h() ? "left" : "top"]: pos, behavior }); } }; } function calculateScrollTarget(itemTop, align, sizes) { const { containerSize, itemSize } = sizes; if (align === "start") { return itemTop; } if (align === "center") { return itemTop - containerSize / 2 + itemSize / 2; } if (align === "end") { return itemTop - containerSize + itemSize; } if (typeof align === "number") { return itemTop - align; } return itemTop; } function resolveNearestAlign(viewport) { const { currentScroll, itemTop, itemSize, containerSize } = viewport; if (currentScroll > itemTop) { return "start"; } if (currentScroll + containerSize < itemTop + itemSize) { return "end"; } return null; } export { calculateScrollTarget, createAxisSelector, resolveNearestAlign };