diff options
Diffstat (limited to 'src/client/scripts/scroll.ts')
| -rw-r--r-- | src/client/scripts/scroll.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/client/scripts/scroll.ts b/src/client/scripts/scroll.ts index a915f2e9ef..be9ea22261 100644 --- a/src/client/scripts/scroll.ts +++ b/src/client/scripts/scroll.ts @@ -26,6 +26,19 @@ export function onScrollTop(el: Element, cb) { container.addEventListener('scroll', onScroll, { passive: true }); } +export function onScrollBottom(el: Element, cb) { + const container = getScrollContainer(el) || window; + const onScroll = ev => { + if (!document.body.contains(el)) return; + const pos = getScrollPosition(el); + if (pos + el.clientHeight > el.scrollHeight - 1) { + cb(); + container.removeEventListener('scroll', onscroll); + } + }; + container.addEventListener('scroll', onScroll, { passive: true }); +} + export function scroll(el: Element, top: number) { const container = getScrollContainer(el); if (container == null) { @@ -34,3 +47,14 @@ export function scroll(el: Element, top: number) { container.scrollTop = top; } } + +export function isBottom(el: Element, asobi = 0) { + const container = getScrollContainer(el); + const current = container + ? el.scrollTop + el.offsetHeight + : window.scrollY + window.innerHeight; + const max = container + ? el.scrollHeight + : document.body.offsetHeight; + return current >= (max - asobi); +} |