@@ -43,6 +43,19 @@ function preventDefault(rawEvent: TouchEvent): boolean {
43
43
return false
44
44
}
45
45
46
+ function getTargetElement (
47
+ element : MaybeRefOrGetter < HTMLElement | SVGElement | Window | Document | null | undefined > ,
48
+ ) : HTMLElement | SVGElement | null | undefined {
49
+ const el = toValue ( element )
50
+ if ( el instanceof Window )
51
+ return window . document . documentElement
52
+
53
+ if ( el instanceof Document )
54
+ return document . documentElement
55
+
56
+ return el
57
+ }
58
+
46
59
/**
47
60
* Lock scrolling of the element.
48
61
*
@@ -58,8 +71,9 @@ export function useScrollLock(
58
71
let initialOverflow : CSSStyleDeclaration [ 'overflow' ]
59
72
60
73
watch ( toRef ( element ) , ( el ) => {
61
- if ( el ) {
62
- const ele = el as HTMLElement
74
+ const target = getTargetElement ( el )
75
+ if ( target ) {
76
+ const ele = target as HTMLElement
63
77
initialOverflow = ele . style . overflow
64
78
if ( isLocked . value )
65
79
ele . style . overflow = 'hidden'
@@ -69,7 +83,7 @@ export function useScrollLock(
69
83
} )
70
84
71
85
const lock = ( ) => {
72
- const ele = ( toValue ( element ) as HTMLElement )
86
+ const ele = getTargetElement ( element )
73
87
if ( ! ele || isLocked . value )
74
88
return
75
89
if ( isIOS ) {
@@ -85,7 +99,7 @@ export function useScrollLock(
85
99
}
86
100
87
101
const unlock = ( ) => {
88
- const ele = ( toValue ( element ) as HTMLElement )
102
+ const ele = getTargetElement ( element )
89
103
if ( ! ele || ! isLocked . value )
90
104
return
91
105
isIOS && stopTouchMoveListener ?.( )
0 commit comments