diff options
author | dan <dan.abramov@gmail.com> | 2023-11-10 21:23:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-10 21:23:17 +0000 |
commit | 86b4842d67c563caf68388e2453f716d1c553862 (patch) | |
tree | 9ba736984ac9116f4039fddae6ae487bbf728de5 /src | |
parent | 91f8a23fbca5585490bb0f2064cdec8dd4b47cc9 (diff) | |
download | voidsky-86b4842d67c563caf68388e2453f716d1c553862.tar.zst |
Fix initial pager gap after fast scroll (#1868)
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/pager/PagerWithHeader.tsx | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/view/com/pager/PagerWithHeader.tsx b/src/view/com/pager/PagerWithHeader.tsx index e93d91fed..95798d26b 100644 --- a/src/view/com/pager/PagerWithHeader.tsx +++ b/src/view/com/pager/PagerWithHeader.tsx @@ -138,17 +138,20 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>( }) } + const lastForcedScrollY = useSharedValue(0) const onScrollWorklet = React.useCallback( (e: NativeScrollEvent) => { 'worklet' const nextScrollY = e.contentOffset.y scrollY.value = nextScrollY - if (nextScrollY < headerOnlyHeight) { + const forcedScrollY = Math.min(nextScrollY, headerOnlyHeight) + if (lastForcedScrollY.value !== forcedScrollY) { + lastForcedScrollY.value = forcedScrollY const refs = scrollRefs.value for (let i = 0; i < refs.length; i++) { if (i !== currentPage) { - scrollTo(refs[i], 0, nextScrollY, false) + scrollTo(refs[i], 0, forcedScrollY, false) } } } @@ -158,7 +161,14 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>( runOnJS(setIsScrolledDown)(nextIsScrolledDown) } }, - [currentPage, headerOnlyHeight, isScrolledDown, scrollRefs, scrollY], + [ + currentPage, + headerOnlyHeight, + isScrolledDown, + scrollRefs, + scrollY, + lastForcedScrollY, + ], ) const onPageSelectedInner = React.useCallback( |