From 75c46172aad4d7bfaeca28cd36ef227069b0f52e Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Fri, 21 Mar 2025 15:42:19 +0800 Subject: [PATCH 1/8] =?UTF-8?q?fix(infiniteloading):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=20lowerThreshold=20=E5=8F=82=E6=95=B0=E4=BB=A5=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=BB=9A=E5=8A=A8=E5=8A=A0=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/packages/infiniteloading/infiniteloading.taro.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index 7a810d0a03..3c517f8dc3 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -161,6 +161,7 @@ export const InfiniteLoading: FunctionComponent< scrollY id="scroller" type="list" + lowerThreshold={threshold} style={{ height: '100%' }} onScroll={scrollAction} onScrollToLower={lower} From 490002b29a58fddb2d7b16915f05cd115797c00f Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Fri, 21 Mar 2025 17:35:30 +0800 Subject: [PATCH 2/8] fix(infiniteloading): optimize pull-to-refresh trigger mechanism in taro --- .../infiniteloading/infiniteloading.taro.tsx | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index 3c517f8dc3..27f123b17f 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -6,12 +6,13 @@ import { useConfig } from '@/packages/configprovider/index.taro' import { ComponentDefaults } from '@/utils/typings' import { TaroInfiniteLoadingProps } from '@/types' import pxTransform from '@/utils/px-transform' +import { mergeProps } from '@/utils/merge-props' const defaultProps = { ...ComponentDefaults, type: 'default', hasMore: true, - threshold: 40, + threshold: 200, target: '', pullRefresh: false, } as TaroInfiniteLoadingProps @@ -37,10 +38,7 @@ export const InfiniteLoading: FunctionComponent< onLoadMore, onScroll, ...rest - } = { - ...defaultProps, - ...props, - } + } = mergeProps(defaultProps, props) const [isInfiniting, setIsInfiniting] = useState(false) const [topDisScoll, setTopDisScoll] = useState(0) const refreshTop = useRef(null) @@ -53,13 +51,25 @@ export const InfiniteLoading: FunctionComponent< const classes = classNames(classPrefix, className, `${classPrefix}-${type}`) + const getRectTaro = async (selector: string): Promise => { + return new Promise((resolve) => { + createSelectorQuery() + .select(selector) + .boundingClientRect() + .exec((res: any) => { + resolve(res[0]) + }) + }) + } + useEffect(() => { - refreshMaxH.current = threshold - const timer = setTimeout(() => { + const timer = setTimeout(async () => { getScrollHeight() + const rect = await getRectTaro('.nut-infinite-top-tips') + refreshMaxH.current = Math.floor((rect?.height ?? 0) * 2.5) }, 200) return () => clearTimeout(timer) - }, [hasMore, isInfiniting, threshold]) + }, [hasMore, isInfiniting]) /** 获取需要滚动的距离 */ const getScrollHeight = () => { From 5d70c28574664564d2d3ae5a98632722d225b7bd Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 26 Mar 2025 20:13:21 +0800 Subject: [PATCH 3/8] feat: add refreshDistance props --- src/packages/infiniteloading/doc.en-US.md | 1 + src/packages/infiniteloading/doc.md | 1 + src/packages/infiniteloading/doc.taro.md | 1 + src/packages/infiniteloading/doc.zh-TW.md | 1 + .../infiniteloading/infiniteloading.taro.tsx | 29 +++++++------------ .../infiniteloading/infiniteloading.tsx | 14 ++++----- .../doc/docs/react/migrate-from-v2.md | 1 + .../doc/docs/taro/migrate-from-v2.md | 1 + src/types/spec/infiniteloading/base.ts | 1 + 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/packages/infiniteloading/doc.en-US.md b/src/packages/infiniteloading/doc.en-US.md index cfdea9e049..53aac8944d 100644 --- a/src/packages/infiniteloading/doc.en-US.md +++ b/src/packages/infiniteloading/doc.en-US.md @@ -65,6 +65,7 @@ import { InfiniteLoading } from '@nutui/nutui-react' | pullRefresh | Enable pull refresh | `boolean` | `false` | | pullingText | Pull refresh text | `ReactNode` | `Let go and refresh` | | loadingText | Pull on loading text | `ReactNode` | `loading...` | +| refreshDistance | Pull refresh trigger distance | `number` | `100` | | onRefresh | Pull down refresh event callback | `() => Promise` | `-` | | onLoadMore | Callback function to continue loading | `() => Promise` | `-` | | onScroll | Monitor scroll height in real time | `(param: number) => void` | `-` | diff --git a/src/packages/infiniteloading/doc.md b/src/packages/infiniteloading/doc.md index 820c0b9cb0..554a2c208f 100644 --- a/src/packages/infiniteloading/doc.md +++ b/src/packages/infiniteloading/doc.md @@ -65,6 +65,7 @@ import { InfiniteLoading } from '@nutui/nutui-react' | pullRefresh | 是否开启下拉刷新 | `boolean` | `false` | | pullingText | 下拉刷新提示文案 | `ReactNode` | `松手刷新` | | loadingText | 上拉加载提示文案 | `ReactNode` | `刷新中` | +| refreshDistance | 下拉刷新触发距离 | `number` | `100` | | onRefresh | 下拉刷新事件回调 | `() => Promise` | `-` | | onLoadMore | 继续加载的回调函数 | `() => Promise` | `-` | | onScroll | 实时监听滚动高度 | `(param: number) => void` | `-` | diff --git a/src/packages/infiniteloading/doc.taro.md b/src/packages/infiniteloading/doc.taro.md index ff5948c2b0..b434098d1d 100644 --- a/src/packages/infiniteloading/doc.taro.md +++ b/src/packages/infiniteloading/doc.taro.md @@ -56,6 +56,7 @@ import { InfiniteLoading } from '@nutui/nutui-react-taro' | pullRefresh | 是否开启下拉刷新 | `boolean` | `false` | | pullingText | 下拉刷新提示文案 | `ReactNode` | `松手刷新` | | loadingText | 上拉加载提示文案 | `ReactNode` | `刷新中` | +| refreshDistance | 下拉刷新触发距离 | `number` | `100` | | onRefresh | 下拉刷新事件回调 | `() => Promise` | `-` | | onLoadMore | 继续加载的回调函数 | `() => Promise` | `-` | | onScroll | 实时监听滚动高度 | `(param: number) => void` | `-` | diff --git a/src/packages/infiniteloading/doc.zh-TW.md b/src/packages/infiniteloading/doc.zh-TW.md index 5fbd19f646..c43d6844cb 100644 --- a/src/packages/infiniteloading/doc.zh-TW.md +++ b/src/packages/infiniteloading/doc.zh-TW.md @@ -65,6 +65,7 @@ import { InfiniteLoading } from '@nutui/nutui-react' | pullRefresh | 是否開啟下拉刷新 | `boolean` | `false` | | pullingText | 下拉刷新提示文案 | `ReactNode` | `鬆手刷新` | | loadingText | 上拉加載提示文案 | `ReactNode` | `加載中...` | +| refreshDistance | 下拉刷新觸發距離 | `number` | `100` | | onRefresh | 下拉刷新事件回調 | `() => Promise` | `-` | | onLoadMore | 繼續加載的回調函數 | `() => Promise` | `-` | | onScroll | 實時監聽滾動高度 | `(param: number) => void` | `-` | diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index 27f123b17f..feabc30800 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -7,6 +7,7 @@ import { ComponentDefaults } from '@/utils/typings' import { TaroInfiniteLoadingProps } from '@/types' import pxTransform from '@/utils/px-transform' import { mergeProps } from '@/utils/merge-props' +import { getRectByTaro } from '@/utils/get-rect-by-taro' const defaultProps = { ...ComponentDefaults, @@ -15,6 +16,7 @@ const defaultProps = { threshold: 200, target: '', pullRefresh: false, + refreshDistance: 100, } as TaroInfiniteLoadingProps const classPrefix = `nut-infiniteloading` @@ -37,6 +39,7 @@ export const InfiniteLoading: FunctionComponent< onRefresh, onLoadMore, onScroll, + refreshDistance, ...rest } = mergeProps(defaultProps, props) const [isInfiniting, setIsInfiniting] = useState(false) @@ -48,25 +51,15 @@ export const InfiniteLoading: FunctionComponent< const y = useRef(0) const refreshMaxH = useRef(0) const distance = useRef(0) + const refreshTipsRef = useRef(null) const classes = classNames(classPrefix, className, `${classPrefix}-${type}`) - const getRectTaro = async (selector: string): Promise => { - return new Promise((resolve) => { - createSelectorQuery() - .select(selector) - .boundingClientRect() - .exec((res: any) => { - resolve(res[0]) - }) - }) - } - useEffect(() => { const timer = setTimeout(async () => { getScrollHeight() - const rect = await getRectTaro('.nut-infinite-top-tips') - refreshMaxH.current = Math.floor((rect?.height ?? 0) * 2.5) + const rect = await getRectByTaro(refreshTipsRef.current) + refreshMaxH.current = Math.floor((rect?.height ?? 0) * 1.5) }, 200) return () => clearTimeout(timer) }, [hasMore, isInfiniting]) @@ -132,9 +125,9 @@ export const InfiniteLoading: FunctionComponent< if (distance.current > 0 && isTouching.current) { event.preventDefault() setTopDisScoll(distance.current) - if (distance.current >= refreshMaxH.current) { - distance.current = refreshMaxH.current - setTopDisScoll(refreshMaxH.current) + if (distance.current >= refreshDistance) { + distance.current = refreshDistance + setTopDisScoll(refreshDistance) } } else { distance.current = 0 @@ -144,7 +137,7 @@ export const InfiniteLoading: FunctionComponent< } const touchEnd = async () => { - if (distance.current < refreshMaxH.current) { + if (distance.current < refreshDistance) { distance.current = 0 setTopDisScoll(0) isTouching.current = false @@ -180,7 +173,7 @@ export const InfiniteLoading: FunctionComponent< onTouchEnd={touchEnd} > - + {pullingText || locale.infiniteloading.pullRefreshText} diff --git a/src/packages/infiniteloading/infiniteloading.tsx b/src/packages/infiniteloading/infiniteloading.tsx index 55fdd73622..70165f6b4f 100644 --- a/src/packages/infiniteloading/infiniteloading.tsx +++ b/src/packages/infiniteloading/infiniteloading.tsx @@ -3,6 +3,7 @@ import classNames from 'classnames' import { useConfig } from '@/packages/configprovider' import { ComponentDefaults } from '@/utils/typings' import { WebInfiniteLoadingProps } from '@/types' +import { mergeProps } from '@/utils/merge-props' declare let window: Window & { webkitRequestAnimationFrame: any } & { mozRequestAnimationFrame: any @@ -16,6 +17,7 @@ const defaultProps = { target: '', capture: false, pullRefresh: false, + refreshDistance: 100, } as WebInfiniteLoadingProps const classPrefix = `nut-infiniteloading` @@ -35,15 +37,13 @@ export const InfiniteLoading: FunctionComponent< pullingText, loadingText, loadMoreText, + refreshDistance, className, onRefresh, onLoadMore, onScroll, ...restProps - } = { - ...defaultProps, - ...props, - } + } = mergeProps(defaultProps, props) const [isInfiniting, setIsInfiniting] = useState(false) const scroller = useRef(null) const refreshTop = useRef(null) @@ -126,8 +126,8 @@ export const InfiniteLoading: FunctionComponent< distance.current = event.touches[0].pageY - y.current if (distance.current > 0 && isTouching.current) { event.preventDefault() - if (distance.current >= refreshMaxH.current) { - distance.current = refreshMaxH.current + if (distance.current >= refreshDistance) { + distance.current = refreshDistance getRefreshTop().style.height = `${distance.current}px` } else { getRefreshTop().style.height = `${distance.current}px` @@ -140,7 +140,7 @@ export const InfiniteLoading: FunctionComponent< } const touchEnd = async () => { - if (distance.current < refreshMaxH.current) { + if (distance.current < refreshDistance) { distance.current = 0 getRefreshTop().style.height = `${distance.current}px` isTouching.current = false diff --git a/src/sites/sites-react/doc/docs/react/migrate-from-v2.md b/src/sites/sites-react/doc/docs/react/migrate-from-v2.md index a9cdf02f2f..586b33a6bd 100644 --- a/src/sites/sites-react/doc/docs/react/migrate-from-v2.md +++ b/src/sites/sites-react/doc/docs/react/migrate-from-v2.md @@ -216,6 +216,7 @@ plugins: [ #### InfiniteLoading - `target` 属性获取监听的目标元素 +- `refreshDistance` 下拉刷新触发距离 [//]: # '#### Notify' [//]: # '#### PullToRefresh' diff --git a/src/sites/sites-react/doc/docs/taro/migrate-from-v2.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v2.md index 4d673d5814..553d121692 100644 --- a/src/sites/sites-react/doc/docs/taro/migrate-from-v2.md +++ b/src/sites/sites-react/doc/docs/taro/migrate-from-v2.md @@ -219,6 +219,7 @@ plugins: [ #### InfiniteLoading - `target` 属性获取监听的目标元素 +- `refreshDistance` 下拉刷新触发距离 [//]: # '#### Notify' [//]: # '#### PullToRefresh' diff --git a/src/types/spec/infiniteloading/base.ts b/src/types/spec/infiniteloading/base.ts index ea60bda4dd..d8c5acb37f 100644 --- a/src/types/spec/infiniteloading/base.ts +++ b/src/types/spec/infiniteloading/base.ts @@ -8,6 +8,7 @@ export interface BaseInfiniteLoading extends BaseProps { type: InfiniteLoadingType hasMore: boolean threshold: number + refreshDistance: number target: string capture: boolean pullRefresh: boolean From 0c67c546397e6390e719e1f106715e90694400b8 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 26 Mar 2025 20:21:59 +0800 Subject: [PATCH 4/8] fix: remove useless codes --- src/packages/infiniteloading/infiniteloading.taro.tsx | 7 +------ src/packages/infiniteloading/infiniteloading.tsx | 2 -- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index feabc30800..0c93ce08db 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -7,7 +7,6 @@ import { ComponentDefaults } from '@/utils/typings' import { TaroInfiniteLoadingProps } from '@/types' import pxTransform from '@/utils/px-transform' import { mergeProps } from '@/utils/merge-props' -import { getRectByTaro } from '@/utils/get-rect-by-taro' const defaultProps = { ...ComponentDefaults, @@ -49,17 +48,13 @@ export const InfiniteLoading: FunctionComponent< const scrollTop = useRef(0) const isTouching = useRef(false) const y = useRef(0) - const refreshMaxH = useRef(0) const distance = useRef(0) - const refreshTipsRef = useRef(null) const classes = classNames(classPrefix, className, `${classPrefix}-${type}`) useEffect(() => { const timer = setTimeout(async () => { getScrollHeight() - const rect = await getRectByTaro(refreshTipsRef.current) - refreshMaxH.current = Math.floor((rect?.height ?? 0) * 1.5) }, 200) return () => clearTimeout(timer) }, [hasMore, isInfiniting]) @@ -173,7 +168,7 @@ export const InfiniteLoading: FunctionComponent< onTouchEnd={touchEnd} > - + {pullingText || locale.infiniteloading.pullRefreshText} diff --git a/src/packages/infiniteloading/infiniteloading.tsx b/src/packages/infiniteloading/infiniteloading.tsx index 70165f6b4f..97df8076ce 100644 --- a/src/packages/infiniteloading/infiniteloading.tsx +++ b/src/packages/infiniteloading/infiniteloading.tsx @@ -50,7 +50,6 @@ export const InfiniteLoading: FunctionComponent< const scrollEl = useRef(null) const isTouching = useRef(false) const beforeScrollTop = useRef(0) - const refreshMaxH = useRef(0) const y = useRef(0) const distance = useRef(0) @@ -118,7 +117,6 @@ export const InfiniteLoading: FunctionComponent< isTouching.current = true const childHeight = (getRefreshTop().firstElementChild as HTMLElement) .offsetHeight - refreshMaxH.current = Math.floor(childHeight * 1 + 10) } } From 81f8290656068c40f06470d8779df39a35f8006d Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 26 Mar 2025 20:26:08 +0800 Subject: [PATCH 5/8] fix: update test snapshot --- .../datepickerview.spec.tsx.snap | 431 ------------------ .../infiniteloading.spec.tsx.snap | 6 +- 2 files changed, 3 insertions(+), 434 deletions(-) delete mode 100644 src/packages/datepickerview/__test__/__snapshots__/datepickerview.spec.tsx.snap diff --git a/src/packages/datepickerview/__test__/__snapshots__/datepickerview.spec.tsx.snap b/src/packages/datepickerview/__test__/__snapshots__/datepickerview.spec.tsx.snap deleted file mode 100644 index 4f973c2b0b..0000000000 --- a/src/packages/datepickerview/__test__/__snapshots__/datepickerview.spec.tsx.snap +++ /dev/null @@ -1,431 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`should match snapshot 1`] = ` -
-
-
-
-
-
- 2015 -
-
- 2016 -
-
- 2017 -
-
- 2018 -
-
- 2019 -
-
- 2020 -
-
- 2021 -
-
- 2022 -
-
- 2023 -
-
- 2024 -
-
- 2025 -
-
- 2026 -
-
- 2027 -
-
- 2028 -
-
- 2029 -
-
- 2030 -
-
- 2031 -
-
- 2032 -
-
- 2033 -
-
- 2034 -
-
- 2035 -
-
-
-
-
-
- 01 -
-
- 02 -
-
- 03 -
-
- 04 -
-
- 05 -
-
- 06 -
-
- 07 -
-
- 08 -
-
- 09 -
-
- 10 -
-
- 11 -
-
- 12 -
-
-
-
-
-
- 01 -
-
- 02 -
-
- 03 -
-
- 04 -
-
- 05 -
-
- 06 -
-
- 07 -
-
- 08 -
-
- 09 -
-
- 10 -
-
- 11 -
-
- 12 -
-
- 13 -
-
- 14 -
-
- 15 -
-
- 16 -
-
- 17 -
-
- 18 -
-
- 19 -
-
- 20 -
-
- 21 -
-
- 22 -
-
- 23 -
-
- 24 -
-
- 25 -
-
- 26 -
-
- 27 -
-
- 28 -
-
- 29 -
-
- 30 -
-
- 31 -
-
-
-
-
-
-
-
-`; diff --git a/src/packages/infiniteloading/__tests__/__snapshots__/infiniteloading.spec.tsx.snap b/src/packages/infiniteloading/__tests__/__snapshots__/infiniteloading.spec.tsx.snap index ba919cda48..618803b87e 100644 --- a/src/packages/infiniteloading/__tests__/__snapshots__/infiniteloading.spec.tsx.snap +++ b/src/packages/infiniteloading/__tests__/__snapshots__/infiniteloading.spec.tsx.snap @@ -118,7 +118,7 @@ exports[`pull base 01 1`] = ` >
Date: Thu, 27 Mar 2025 16:16:16 +0800 Subject: [PATCH 6/8] fix: update docs content --- src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md | 3 ++- src/sites/sites-react/doc/docs/taro/migrate-from-v2.en-US.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md b/src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md index 570aa4230b..e8c7a06318 100644 --- a/src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md +++ b/src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md @@ -1,4 +1,4 @@ -# Upgrade from v2 to v3. +# Upgrade from v2 to v3 This document will assist you in upgrading from NutUI React 2.x to NutUI React 3.x. @@ -214,6 +214,7 @@ If your project uses these components, please read the documentation carefully a #### InfiniteLoading - The target attribute is used to obtain the element that is being listened to. +- `refreshDistance` The distance to trigger the pull-down refresh. [//]: # '#### Notify' [//]: # '#### PullToRefresh' diff --git a/src/sites/sites-react/doc/docs/taro/migrate-from-v2.en-US.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v2.en-US.md index 570aa4230b..e8c7a06318 100644 --- a/src/sites/sites-react/doc/docs/taro/migrate-from-v2.en-US.md +++ b/src/sites/sites-react/doc/docs/taro/migrate-from-v2.en-US.md @@ -1,4 +1,4 @@ -# Upgrade from v2 to v3. +# Upgrade from v2 to v3 This document will assist you in upgrading from NutUI React 2.x to NutUI React 3.x. @@ -214,6 +214,7 @@ If your project uses these components, please read the documentation carefully a #### InfiniteLoading - The target attribute is used to obtain the element that is being listened to. +- `refreshDistance` The distance to trigger the pull-down refresh. [//]: # '#### Notify' [//]: # '#### PullToRefresh' From e188a52af12a589aae713de227377b3330733d2c Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Thu, 27 Mar 2025 18:46:10 +0800 Subject: [PATCH 7/8] =?UTF-8?q?fix:=20=E6=97=A0=E6=B3=95=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infiniteloading/infiniteloading.taro.tsx | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index 0c93ce08db..13d3c1bbbb 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -109,21 +109,25 @@ export const InfiniteLoading: FunctionComponent< } const touchStart = (event: any) => { - if (scrollTop.current === 0 && !isTouching.current && pullRefresh) { + if (!isTouching.current && pullRefresh) { y.current = event.touches[0].pageY + distance.current = 0 + setTopDisScoll(0) isTouching.current = true } } const touchMove = (event: any) => { - distance.current = event.touches[0].pageY - y.current - if (distance.current > 0 && isTouching.current) { + if (!isTouching.current) return + const currentY = event.touches[0].pageY + const newDistance = Math.max(0, currentY - y.current) + distance.current = newDistance + + if (newDistance > 0) { event.preventDefault() - setTopDisScoll(distance.current) - if (distance.current >= refreshDistance) { - distance.current = refreshDistance - setTopDisScoll(refreshDistance) - } + const finalDistance = Math.min(newDistance, refreshDistance) + distance.current = finalDistance + setTopDisScoll(finalDistance) } else { distance.current = 0 setTopDisScoll(0) @@ -132,14 +136,17 @@ export const InfiniteLoading: FunctionComponent< } const touchEnd = async () => { + if (!isTouching.current) return + if (distance.current < refreshDistance) { distance.current = 0 setTopDisScoll(0) - isTouching.current = false - } else { - await onRefresh?.() - refreshDone() + } else if (onRefresh) { + await onRefresh() } + + isTouching.current = false + refreshDone() } function getBottomTipsText() { From eecad5a5420cacbbca82cd9ee66a7f5f25681cd4 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Thu, 17 Apr 2025 15:01:04 +0800 Subject: [PATCH 8/8] fix: resolve conflicts --- src/packages/infiniteloading/infiniteloading.taro.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/packages/infiniteloading/infiniteloading.taro.tsx b/src/packages/infiniteloading/infiniteloading.taro.tsx index 14ea538e26..4c4a730501 100644 --- a/src/packages/infiniteloading/infiniteloading.taro.tsx +++ b/src/packages/infiniteloading/infiniteloading.taro.tsx @@ -6,6 +6,7 @@ import { useConfig } from '@/packages/configprovider/index.taro' import { ComponentDefaults } from '@/utils/typings' import { TaroInfiniteLoadingProps } from '@/types' import { pxTransform } from '@/utils/taro/px-transform' +import { mergeProps } from '@/utils' const defaultProps = { ...ComponentDefaults,