fix(#1249): break sticky-bottom lock when user scrolls up during snap animation
This commit is contained in:
parent
0723737d89
commit
9f8694e3cf
2 changed files with 31 additions and 6 deletions
|
|
@ -121,7 +121,15 @@ the smooth animation eases through positions that are technically
|
|||
`smoothScrollingUntil` timestamp gates the scroll handler — set to
|
||||
the animation end + ~80ms headroom, re-armed on each fresh snap.
|
||||
Programmatic `scrollTop` writes (the animation's per-frame update)
|
||||
fire scroll events that the gate swallows.
|
||||
fire scroll events that the gate swallows. One caveat: if live events
|
||||
arrive faster than the animation window (< 220ms apart), the
|
||||
MutationObserver keeps re-firing `snapToBottom()` which perpetually
|
||||
re-arms the gate — trapping the operator at the bottom with no way
|
||||
to scroll up or trigger `loadMore()`. Safety valve: even inside the
|
||||
guard the handler checks `isNearBottom()`; if the operator has
|
||||
scrolled away from the bottom, `stickToBottom` is immediately forced
|
||||
false. The MO's `if (stickToBottom)` check then stops re-arming
|
||||
snaps, and the gate expires within ≤220ms.
|
||||
|
||||
**Post-append `MutationObserver`.** Renderers commonly call
|
||||
`api.row(cls, text)` to create the row shell then append more
|
||||
|
|
|
|||
Loading…
Reference in a new issue