Fix initial pager gap after fast scroll (#1868)

This commit is contained in:
dan 2023-11-10 21:23:17 +00:00 committed by GitHub
parent 91f8a23fbc
commit 86b4842d67
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -138,17 +138,20 @@ export const PagerWithHeader = React.forwardRef<PagerRef, PagerWithHeaderProps>(
}) })
} }
const lastForcedScrollY = useSharedValue(0)
const onScrollWorklet = React.useCallback( const onScrollWorklet = React.useCallback(
(e: NativeScrollEvent) => { (e: NativeScrollEvent) => {
'worklet' 'worklet'
const nextScrollY = e.contentOffset.y const nextScrollY = e.contentOffset.y
scrollY.value = nextScrollY scrollY.value = nextScrollY
if (nextScrollY < headerOnlyHeight) { const forcedScrollY = Math.min(nextScrollY, headerOnlyHeight)
if (lastForcedScrollY.value !== forcedScrollY) {
lastForcedScrollY.value = forcedScrollY
const refs = scrollRefs.value const refs = scrollRefs.value
for (let i = 0; i < refs.length; i++) { for (let i = 0; i < refs.length; i++) {
if (i !== currentPage) { 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) runOnJS(setIsScrolledDown)(nextIsScrolledDown)
} }
}, },
[currentPage, headerOnlyHeight, isScrolledDown, scrollRefs, scrollY], [
currentPage,
headerOnlyHeight,
isScrolledDown,
scrollRefs,
scrollY,
lastForcedScrollY,
],
) )
const onPageSelectedInner = React.useCallback( const onPageSelectedInner = React.useCallback(