From 0e7e58044d0409bfa99c7ae66153aeaccbcccaec Mon Sep 17 00:00:00 2001 From: Robin Scholz Date: Tue, 25 Oct 2022 11:02:06 +0200 Subject: [PATCH 1/4] fix(useScrollLock): fix iOS touchmove bug --- packages/core/useScrollLock/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/core/useScrollLock/index.ts b/packages/core/useScrollLock/index.ts index 2636233d5e5..a4cbd1ff7ba 100644 --- a/packages/core/useScrollLock/index.ts +++ b/packages/core/useScrollLock/index.ts @@ -4,8 +4,13 @@ import { isIOS, resolveRef, resolveUnref, tryOnScopeDispose } from '@vueuse/shar import { useEventListener } from '../useEventListener' -function preventDefault(rawEvent: TouchEvent): boolean { +function preventDefault(rawEvent: TouchEvent, ele: Element): boolean { const e = rawEvent || window.event + + // Do not prevent if the event is fired from a child (otherwise iOS implementation will not work) + if (ele !== e.target) + return false + // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom). if (e.touches.length > 1) return true @@ -49,7 +54,7 @@ export function useScrollLock( stopTouchMoveListener = useEventListener( ele, 'touchmove', - preventDefault, + (e) => { preventDefault(e as TouchEvent, ele) }, { passive: false }, ) } From 89be00aaadb8943f6814fe83898fea92ca034d8d Mon Sep 17 00:00:00 2001 From: webfansplz <308241863@qq.com> Date: Wed, 26 Oct 2022 23:26:47 +0800 Subject: [PATCH 2/4] chore: update --- packages/core/useScrollLock/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/useScrollLock/index.ts b/packages/core/useScrollLock/index.ts index a4cbd1ff7ba..ae07382b3e7 100644 --- a/packages/core/useScrollLock/index.ts +++ b/packages/core/useScrollLock/index.ts @@ -7,7 +7,7 @@ import { useEventListener } from '../useEventListener' function preventDefault(rawEvent: TouchEvent, ele: Element): boolean { const e = rawEvent || window.event - // Do not prevent if the event is fired from a child (otherwise iOS implementation will not work) + // Do not prevent if the event is fired from a child. if (ele !== e.target) return false From bc7f77daa2c57a678ef352d47dbb5e87ab693217 Mon Sep 17 00:00:00 2001 From: robinscholz Date: Thu, 27 Oct 2022 16:27:01 +0200 Subject: [PATCH 3/4] feat(useScrollLock): check for in TouchListener --- packages/core/useScrollLock/demo.vue | 2 +- packages/core/useScrollLock/index.ts | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/core/useScrollLock/demo.vue b/packages/core/useScrollLock/demo.vue index 3846ed8dec6..a8fe8c14e83 100644 --- a/packages/core/useScrollLock/demo.vue +++ b/packages/core/useScrollLock/demo.vue @@ -10,7 +10,7 @@ const toggleLock = useToggle(isLocked)