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?.()