diff options
| author | adamelmore <[email protected]> | 2026-01-27 14:38:57 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-27 15:25:06 -0600 |
| commit | d7948c2376ee2611bd64cc5ea1f787330313c2ef (patch) | |
| tree | 0f3a18d8ba65c879384e8c814de73987c0a6007d /packages/app/src | |
| parent | 892113ab39e233ec4c538558a9035de03ce6cadb (diff) | |
| download | opencode-d7948c2376ee2611bd64cc5ea1f787330313c2ef.tar.gz opencode-d7948c2376ee2611bd64cc5ea1f787330313c2ef.zip | |
fix(app): auto-scroll
Diffstat (limited to 'packages/app/src')
| -rw-r--r-- | packages/app/src/pages/session.tsx | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index e75bd2fed..7257cdc11 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -524,6 +524,15 @@ export default function Page() { const scrollGestureWindowMs = 250 + const scrollIgnoreWindowMs = 250 + let scrollIgnore = 0 + + const markScrollIgnore = () => { + scrollIgnore = Date.now() + } + + const hasScrollIgnore = () => Date.now() - scrollIgnore < scrollIgnoreWindowMs + const markScrollGesture = (target?: EventTarget | null) => { const root = scroller if (!root) return @@ -1341,7 +1350,9 @@ export default function Page() { requestAnimationFrame(() => { const delta = el.scrollHeight - beforeHeight - if (delta) el.scrollTop = beforeTop + delta + if (!delta) return + markScrollIgnore() + el.scrollTop = beforeTop + delta }) scheduleTurnBackfill() @@ -1378,6 +1389,7 @@ export default function Page() { if (stick && el) { requestAnimationFrame(() => { + markScrollIgnore() el.scrollTo({ top: el.scrollHeight, behavior: "auto" }) }) } @@ -1779,8 +1791,9 @@ export default function Page() { markScrollGesture(e.target) }} onScroll={(e) => { - autoScroll.handleScroll() - if (!hasScrollGesture()) return + const gesture = hasScrollGesture() + if (!hasScrollIgnore() || gesture) autoScroll.handleScroll() + if (!gesture) return markScrollGesture(e.target) if (isDesktop()) scheduleScrollSpy(e.currentTarget) }} |
