From dc61a2174b647882175b3701bb788e7c9bbbca68 Mon Sep 17 00:00:00 2001 From: lareinayanyu Date: Tue, 7 Jan 2025 19:24:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DscrollToLower?= =?UTF-8?q?=EF=BC=8CscrollToTop=E6=97=A0=E6=B3=95=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/react/mpx-scroll-view.tsx | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx b/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx index b058e622dc..d8a88cd881 100644 --- a/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx +++ b/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx @@ -160,8 +160,6 @@ const _ScrollView = forwardRef, S }) const scrollEventThrottle = 50 - const hasCallScrollToUpper = useRef(true) - const hasCallScrollToLower = useRef(false) const initialTimeout = useRef | null>(null) const intersectionObservers = useContext(IntersectionObserverContext) @@ -254,19 +252,14 @@ const _ScrollView = forwardRef, S const { bindscrolltoupper } = props const { offset } = scrollOptions.current if (bindscrolltoupper && (offset <= upperThreshold)) { - if (!hasCallScrollToUpper.current) { - bindscrolltoupper( - getCustomEvent('scrolltoupper', e, { - detail: { - direction: scrollX ? 'left' : 'top' - }, - layoutRef - }, props) - ) - hasCallScrollToUpper.current = true - } - } else { - hasCallScrollToUpper.current = false + bindscrolltoupper( + getCustomEvent('scrolltoupper', e, { + detail: { + direction: scrollX ? 'left' : 'top' + }, + layoutRef + }, props) + ) } } @@ -275,19 +268,14 @@ const _ScrollView = forwardRef, S const { contentLength, visibleLength, offset } = scrollOptions.current const distanceFromEnd = contentLength - visibleLength - offset if (bindscrolltolower && (distanceFromEnd < lowerThreshold)) { - if (!hasCallScrollToLower.current) { - hasCallScrollToLower.current = true - bindscrolltolower( - getCustomEvent('scrolltolower', e, { - detail: { - direction: scrollX ? 'right' : 'botttom' - }, - layoutRef - }, props) - ) - } - } else { - hasCallScrollToLower.current = false + bindscrolltolower( + getCustomEvent('scrolltolower', e, { + detail: { + direction: scrollX ? 'right' : 'botttom' + }, + layoutRef + }, props) + ) } } From dc7c45e72c214a3fb1959d58d0848617d9fbcf7c Mon Sep 17 00:00:00 2001 From: lareinayanyu Date: Wed, 8 Jan 2025 18:42:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BA=8B=E4=BB=B6=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/react/mpx-scroll-view.tsx | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx b/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx index d8a88cd881..918a0cfb59 100644 --- a/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx +++ b/packages/webpack-plugin/lib/runtime/components/react/mpx-scroll-view.tsx @@ -160,6 +160,8 @@ const _ScrollView = forwardRef, S }) const scrollEventThrottle = 50 + const hasCallScrollToUpper = useRef(true) + const hasCallScrollToLower = useRef(false) const initialTimeout = useRef | null>(null) const intersectionObservers = useContext(IntersectionObserverContext) @@ -252,14 +254,19 @@ const _ScrollView = forwardRef, S const { bindscrolltoupper } = props const { offset } = scrollOptions.current if (bindscrolltoupper && (offset <= upperThreshold)) { - bindscrolltoupper( - getCustomEvent('scrolltoupper', e, { - detail: { - direction: scrollX ? 'left' : 'top' - }, - layoutRef - }, props) - ) + if (!hasCallScrollToUpper.current) { + bindscrolltoupper( + getCustomEvent('scrolltoupper', e, { + detail: { + direction: scrollX ? 'left' : 'top' + }, + layoutRef + }, props) + ) + hasCallScrollToUpper.current = true + } + } else { + hasCallScrollToUpper.current = false } } @@ -268,14 +275,19 @@ const _ScrollView = forwardRef, S const { contentLength, visibleLength, offset } = scrollOptions.current const distanceFromEnd = contentLength - visibleLength - offset if (bindscrolltolower && (distanceFromEnd < lowerThreshold)) { - bindscrolltolower( - getCustomEvent('scrolltolower', e, { - detail: { - direction: scrollX ? 'right' : 'botttom' - }, - layoutRef - }, props) - ) + if (!hasCallScrollToLower.current) { + hasCallScrollToLower.current = true + bindscrolltolower( + getCustomEvent('scrolltolower', e, { + detail: { + direction: scrollX ? 'right' : 'botttom' + }, + layoutRef + }, props) + ) + } + } else { + hasCallScrollToLower.current = false } } @@ -320,6 +332,8 @@ const _ScrollView = forwardRef, S }, props) ) updateScrollOptions(e, { scrollLeft, scrollTop }) + onStartReached(e) + onEndReached(e) if (enableTriggerIntersectionObserver && intersectionObservers) { for (const key in intersectionObservers) { intersectionObservers[key].throttleMeasure()