@@ -3,8 +3,13 @@ import { onBeforeUnmount, watch } from 'vue'
3
3
import type CoreModal from './CoreModal.vue'
4
4
5
5
type BodyScrollOptions = {
6
- reserveScrollBarGap : boolean
7
- allowTouchMove : ( el ?: null | HTMLElement ) => boolean
6
+ reserveScrollBarGap ?: boolean
7
+ allowTouchMove ?: ( el ?: null | HTMLElement ) => boolean
8
+ }
9
+
10
+ type Lock = {
11
+ targetElement : HTMLElement
12
+ options ?: BodyScrollOptions
8
13
}
9
14
10
15
// stolen from body-scroll-lock
@@ -33,7 +38,7 @@ const isIosDevice
33
38
&& ( / i P ( a d | h o n e | o d ) / . test ( window . navigator . platform )
34
39
|| ( window . navigator . platform === 'MacIntel' && window . navigator . maxTouchPoints > 1 ) )
35
40
36
- let locks : any [ ] = [ ]
41
+ let locks : Lock [ ] = [ ]
37
42
let documentListenerAdded = false
38
43
let clientY = 0
39
44
let initialClientY = - 1
@@ -232,6 +237,13 @@ export function useLockScroll(props: InstanceType<typeof CoreModal>['$props'], o
232
237
lockScrollEl : Ref < undefined | HTMLElement >
233
238
} ) {
234
239
const { lockScrollEl } = options
240
+
241
+ let _lockScrollEl : HTMLElement
242
+ watch ( lockScrollEl , ( val ) => {
243
+ if ( val )
244
+ _lockScrollEl = val
245
+ } , { immediate : true } )
246
+
235
247
watch ( ( ) => props . lockScroll , ( val ) => {
236
248
val ? _disableBodyScroll ( ) : _enableBodyScroll ( )
237
249
} )
@@ -241,12 +253,12 @@ export function useLockScroll(props: InstanceType<typeof CoreModal>['$props'], o
241
253
} )
242
254
243
255
function _enableBodyScroll ( ) {
244
- lockScrollEl . value && enableBodyScroll ( lockScrollEl . value )
256
+ _lockScrollEl && enableBodyScroll ( _lockScrollEl )
245
257
}
246
258
247
259
function _disableBodyScroll ( ) {
248
- props . lockScroll && lockScrollEl . value
249
- && disableBodyScroll ( lockScrollEl . value , {
260
+ props . lockScroll && _lockScrollEl
261
+ && disableBodyScroll ( _lockScrollEl , {
250
262
reserveScrollBarGap : true ,
251
263
allowTouchMove : ( el ) => {
252
264
while ( el && el !== document . body ) {
0 commit comments