diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2020-08-19 17:52:11 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2020-08-19 17:52:11 +0900 |
| commit | 6870262f8d50407115160979b483a43503ee854f (patch) | |
| tree | 39fb78e731b8e68819cac69cdb2f482a7486ba0e /src/client/scripts/scroll.ts | |
| parent | fix(clinet): 誤字によりスクロールイベントリスナが解除さ... (diff) | |
| download | sharkey-6870262f8d50407115160979b483a43503ee854f.tar.gz sharkey-6870262f8d50407115160979b483a43503ee854f.tar.bz2 sharkey-6870262f8d50407115160979b483a43503ee854f.zip | |
enhance(client): Better element visible detection
Diffstat (limited to 'src/client/scripts/scroll.ts')
| -rw-r--r-- | src/client/scripts/scroll.ts | 10 |
1 files changed, 8 insertions, 2 deletions
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); } |