From bbcd2fbe6ea53169ba10687c315d95fe22f9a4a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Wed, 25 Nov 2020 20:56:36 +0800 Subject: [PATCH] refactor: RM opt of preventDefault logic (#338) * chore: Clean up prevent default * chore: Rm alignInRange --- src/TabNavList/index.tsx | 26 +++++++++++--------------- src/hooks/useTouchMove.ts | 15 ++------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/TabNavList/index.tsx b/src/TabNavList/index.tsx index 4a7883b4..99398a31 100644 --- a/src/TabNavList/index.tsx +++ b/src/TabNavList/index.tsx @@ -15,7 +15,7 @@ import { OnTabScroll, TabBarExtraPosition, TabBarExtraContent, - TabBarExtraMap + TabBarExtraMap, } from '../interface'; import useOffsets from '../hooks/useOffsets'; import useVisibleRange from '../hooks/useVisibleRange'; @@ -48,7 +48,6 @@ export interface TabNavListProps { children?: (node: React.ReactElement) => React.ReactElement; } - interface ExtraContentProps { position: TabBarExtraPosition; prefixCls: string; @@ -139,14 +138,14 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { transformMax = 0; } - function alignInRange(value: number): [number, boolean] { + function alignInRange(value: number): number { if (value < transformMin) { - return [transformMin, false]; + return transformMin; } if (value > transformMax) { - return [transformMax, false]; + return transformMax; } - return [value, true]; + return value; } // ========================= Mobile ======================== @@ -162,13 +161,10 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { } useTouchMove(tabsWrapperRef, (offsetX, offsetY) => { - let preventDefault = false; - function doMove(setState: React.Dispatch>, offset: number) { setState(value => { - const [newValue, needPrevent] = alignInRange(value + offset); + const newValue = alignInRange(value + offset); - preventDefault = needPrevent; return newValue; }); } @@ -176,13 +172,13 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { if (tabPositionTopOrBottom) { // Skip scroll if place is enough if (wrapperWidth >= wrapperScrollWidth) { - return preventDefault; + return false; } doMove(setTransformLeft, offsetX); } else { if (wrapperHeight >= wrapperScrollHeight) { - return preventDefault; + return false; } doMove(setTransformTop, offsetY); @@ -191,7 +187,7 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { clearTouchMoving(); doLockAnimation(); - return preventDefault; + return true; }); useEffect(() => { @@ -235,7 +231,7 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { } setTransformTop(0); - setTransformLeft(alignInRange(newTransform)[0]); + setTransformLeft(alignInRange(newTransform)); } else { // ============ Align with left & right ============ let newTransform = transformTop; @@ -247,7 +243,7 @@ function TabNavList(props: TabNavListProps, ref: React.Ref) { } setTransformLeft(0); - setTransformTop(alignInRange(newTransform)[0]); + setTransformTop(alignInRange(newTransform)); } } diff --git a/src/hooks/useTouchMove.ts b/src/hooks/useTouchMove.ts index fed96937..dcb126a2 100644 --- a/src/hooks/useTouchMove.ts +++ b/src/hooks/useTouchMove.ts @@ -76,12 +76,11 @@ export default function useTouchMove( } // >>> Wheel event - const lastWheelTimestampRef = useRef(0); - const lastWheelPreventRef = useRef(false); const lastWheelDirectionRef = useRef<'x' | 'y'>(); function onWheel(e: WheelEvent) { const { deltaX, deltaY } = e; + // Convert both to x & y since wheel only happened on PC let mixed: number = 0; const absX = Math.abs(deltaX); @@ -96,19 +95,9 @@ export default function useTouchMove( lastWheelDirectionRef.current = 'y'; } - // Optimize mac touch scroll - const now = Date.now(); - - if (now - lastWheelTimestampRef.current > 100) { - lastWheelPreventRef.current = false; - } - - if (onOffset(-mixed, -mixed) || lastWheelPreventRef.current) { + if (onOffset(-mixed, -mixed)) { e.preventDefault(); - lastWheelPreventRef.current = true; } - - lastWheelTimestampRef.current = now; } // ========================= Effect =========================