From bcf13e690ceddf961d41d9d513c10397618f56ce Mon Sep 17 00:00:00 2001 From: zernonia <59365435+zernonia@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:25:37 +0800 Subject: [PATCH] fix: scroll doesnt work inside modal on ios (#617) * fix: listener on window prevent all other scroll * chore: add story --- .../Popover/story/PopoverBodyLock.story.vue | 101 ++++++++++++++++++ .../radix-vue/src/shared/useBodyScrollLock.ts | 5 +- 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 packages/radix-vue/src/Popover/story/PopoverBodyLock.story.vue diff --git a/packages/radix-vue/src/Popover/story/PopoverBodyLock.story.vue b/packages/radix-vue/src/Popover/story/PopoverBodyLock.story.vue new file mode 100644 index 000000000..297428a19 --- /dev/null +++ b/packages/radix-vue/src/Popover/story/PopoverBodyLock.story.vue @@ -0,0 +1,101 @@ + + + diff --git a/packages/radix-vue/src/shared/useBodyScrollLock.ts b/packages/radix-vue/src/shared/useBodyScrollLock.ts index d76889ea1..b82508de5 100644 --- a/packages/radix-vue/src/shared/useBodyScrollLock.ts +++ b/packages/radix-vue/src/shared/useBodyScrollLock.ts @@ -66,9 +66,12 @@ export function useBodyScrollLock(initialState?: boolean | undefined) { if (isIOS) { stopTouchMoveListener = useEventListener( - window, + document, 'touchmove', (e: TouchEvent) => { + if (e.target !== document.documentElement) + return + if (e.touches.length > 1) return e.preventDefault?.()