diff options
| author | おさむのひと <46447427+samunohito@users.noreply.github.com> | 2024-09-24 10:09:55 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-24 10:09:55 +0900 |
| commit | 98de7ca5269a9cd6d42f0382fd923379aec99751 (patch) | |
| tree | e367dc109b766f8fcd04a05bcae40d10b13e3a4b /packages/frontend-shared | |
| parent | ci: fix syntax error (#14602) (diff) | |
| download | sharkey-98de7ca5269a9cd6d42f0382fd923379aec99751.tar.gz sharkey-98de7ca5269a9cd6d42f0382fd923379aec99751.tar.bz2 sharkey-98de7ca5269a9cd6d42f0382fd923379aec99751.zip | |
fix(frontend): 連合一覧等のページネーションが壊れていたのを修正 (#14439)
* fix
* fix
* fix CHANGELOG.md
* 開発環境以外でログが出ないように
---------
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
Diffstat (limited to 'packages/frontend-shared')
| -rw-r--r-- | packages/frontend-shared/js/scroll.ts | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/packages/frontend-shared/js/scroll.ts b/packages/frontend-shared/js/scroll.ts index 1062e5252f..4f2e9105c3 100644 --- a/packages/frontend-shared/js/scroll.ts +++ b/packages/frontend-shared/js/scroll.ts @@ -36,19 +36,27 @@ export function getScrollPosition(el: HTMLElement | null): number { return container == null ? window.scrollY : container.scrollTop; } -export function onScrollTop(el: HTMLElement, cb: () => unknown, tolerance = 1, once = false) { +export function onScrollTop(el: HTMLElement, cb: (topVisible: boolean) => unknown, tolerance = 1, once = false) { // とりあえず評価してみる - if (el.isConnected && isTopVisible(el)) { - cb(); + const firstTopVisible = isTopVisible(el); + if (el.isConnected && firstTopVisible) { + cb(firstTopVisible); if (once) return null; } const container = getScrollContainer(el) ?? window; + // 以下のケースにおいて、cbが何度も呼び出されてしまって具合が悪いので1回呼んだら以降は無視するようにする + // - スクロールイベントは1回のスクロールで複数回発生することがある + // - toleranceの範囲内に収まる程度の微量なスクロールが発生した + let prevTopVisible = firstTopVisible; const onScroll = () => { if (!document.body.contains(el)) return; - if (isTopVisible(el, tolerance)) { - cb(); + + const topVisible = isTopVisible(el, tolerance); + if (topVisible !== prevTopVisible) { + prevTopVisible = topVisible; + cb(topVisible); if (once) removeListener(); } }; @@ -126,6 +134,7 @@ export function scrollToBottom( export function isTopVisible(el: HTMLElement, tolerance = 1): boolean { const scrollTop = getScrollPosition(el); + if (_DEV_) console.log(scrollTop, tolerance, scrollTop <= tolerance); return scrollTop <= tolerance; } |