diff options
| author | Claude <noreply@anthropic.com> | 2026-02-17 17:00:13 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-02-17 17:00:13 +0000 |
| commit | 8ac775d7ce97e31a9531572f6f116dfc8de25d35 (patch) | |
| tree | c429272b7cade26edd9f7a44ac02a9ff432b9b7a /.github/workflows/ci.yml | |
| parent | 90177f1645bf886a2e4f84f4db287ba379f01773 (diff) | |
| download | neko-8ac775d7ce97e31a9531572f6f116dfc8de25d35.tar.gz neko-8ac775d7ce97e31a9531572f6f116dfc8de25d35.tar.bz2 neko-8ac775d7ce97e31a9531572f6f116dfc8de25d35.zip | |
fix: replace IntersectionObserver with scroll-position check for infinite scroll
The IntersectionObserver approach for infinite scroll was unreliable —
items would not load when scrolling to the bottom in v3, while v1's
polling approach worked fine. The issue was that IntersectionObserver
with a custom root element (main-content, whose height comes from flex
align-items:stretch rather than an explicit height) didn't fire
reliably, and renderItems() being called 3 times per fetch cycle
(from both items-updated and loading-state-changed events) kept
destroying and recreating the observer.
Replace with a simple scroll-position check in the existing onscroll
handler, matching v1's proven approach: when the user scrolls within
200px of the bottom of #main-content, trigger loadMore(). This runs
on every scroll event (cheap arithmetic comparison) and only fires
when content actually overflows the container.
Remove the unused itemObserver module-level variable.
Update regression tests to simulate scroll position instead of
IntersectionObserver callbacks, with 4 cases: scroll near bottom
triggers load, scroll far from bottom doesn't, loading=true blocks,
and hasMore=false hides sentinel.
https://claude.ai/code/session_01DpWhB9uGGMBnzqS28HxnuV
Diffstat (limited to '.github/workflows/ci.yml')
0 files changed, 0 insertions, 0 deletions
