function isScrollContainer(element: HTMLElement) {
const styles = getComputedStyle(element)
const overflow = styles.overflowY
return overflow === "auto" || overflow === "scroll"
}
export function getScrollInfo(target: HTMLElement, container: HTMLElement) {
let element = target
let availableScroll = 0
let availableScrollTop = 0
while (element) {
const { clientHeight, scrollTop, scrollHeight } = element
const scrolled = scrollHeight - scrollTop - clientHeight
if ((scrollTop !== 0 || scrolled !== 0) && isScrollContainer(element)) {
availableScroll += scrolled
availableScrollTop += scrollTop
}
if (element === container || element === document.documentElement) break
element = element.parentNode as HTMLElement
}
return {
availableScroll,
availableScrollTop,
}
}