fix: delay scroll handler binding to skip queued scroll event

scrollTop assignment triggers an async scroll event. When all tasks
fit in the viewport, handleScrollFocus recalculates center-aligned
task and picks the last one instead of the saved one. Using setTimeout(0)
defers handler binding to after the queued event fires.
This commit is contained in:
Yuyao Huang 2026-05-09 15:59:13 +08:00
parent 2229fdd0ef
commit ab000bcd41

View File

@ -170,8 +170,12 @@ function initScrollFocus() {
scrollView.removeEventListener("scroll", handleScrollFocus); scrollView.removeEventListener("scroll", handleScrollFocus);
scrollView.removeEventListener("scroll", handleScrollSave); scrollView.removeEventListener("scroll", handleScrollSave);
// Delay binding to skip the async scroll event queued by scrollToTask
setTimeout(() => {
scrollView.addEventListener("scroll", handleScrollFocus); scrollView.addEventListener("scroll", handleScrollFocus);
scrollView.addEventListener("scroll", handleScrollSave); scrollView.addEventListener("scroll", handleScrollSave);
}, 0);
} }
function handleScrollFocus() { function handleScrollFocus() {