From 6870262f8d50407115160979b483a43503ee854f Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 19 Aug 2020 17:52:11 +0900 Subject: enhance(client): Better element visible detection --- src/client/scripts/scroll.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/client/scripts/scroll.ts') diff --git a/src/client/scripts/scroll.ts b/src/client/scripts/scroll.ts index bad31a80f5..18c3366891 100644 --- a/src/client/scripts/scroll.ts +++ b/src/client/scripts/scroll.ts @@ -13,12 +13,18 @@ export function getScrollPosition(el: Element | null): number { return container == null ? window.scrollY : container.scrollTop; } +export function isTopVisible(el: Element | null): boolean { + const scrollTop = getScrollPosition(el); + const topPosition = el.offsetTop; // TODO: container内でのelの相対位置を取得できればより正確になる + + return scrollTop <= topPosition; +} + export function onScrollTop(el: Element, cb) { const container = getScrollContainer(el) || window; const onScroll = ev => { if (!document.body.contains(el)) return; - const pos = getScrollPosition(el); - if (pos === 0) { + if (isTopVisible(el)) { cb(); container.removeEventListener('scroll', onScroll); } -- cgit v1.2.3-freya