@@ -3,8 +3,13 @@ import { onBeforeUnmount, watch } from 'vue'
33import type CoreModal from './CoreModal.vue'
44
55type 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
813}
914
1015// stolen from body-scroll-lock
@@ -33,7 +38,7 @@ const isIosDevice
3338 && ( / i P ( a d | h o n e | o d ) / . test ( window . navigator . platform )
3439 || ( window . navigator . platform === 'MacIntel' && window . navigator . maxTouchPoints > 1 ) )
3540
36- let locks : any [ ] = [ ]
41+ let locks : Lock [ ] = [ ]
3742let documentListenerAdded = false
3843let clientY = 0
3944let initialClientY = - 1
@@ -232,6 +237,13 @@ export function useLockScroll(props: InstanceType<typeof CoreModal>['$props'], o
232237 lockScrollEl : Ref < undefined | HTMLElement >
233238} ) {
234239 const { lockScrollEl } = options
240+
241+ let _lockScrollEl : HTMLElement
242+ watch ( lockScrollEl , ( val ) => {
243+ if ( val )
244+ _lockScrollEl = val
245+ } , { immediate : true } )
246+
235247 watch ( ( ) => props . lockScroll , ( val ) => {
236248 val ? _disableBodyScroll ( ) : _enableBodyScroll ( )
237249 } )
@@ -241,12 +253,12 @@ export function useLockScroll(props: InstanceType<typeof CoreModal>['$props'], o
241253 } )
242254
243255 function _enableBodyScroll ( ) {
244- lockScrollEl . value && enableBodyScroll ( lockScrollEl . value )
256+ _lockScrollEl && enableBodyScroll ( _lockScrollEl )
245257 }
246258
247259 function _disableBodyScroll ( ) {
248- props . lockScroll && lockScrollEl . value
249- && disableBodyScroll ( lockScrollEl . value , {
260+ props . lockScroll && _lockScrollEl
261+ && disableBodyScroll ( _lockScrollEl , {
250262 reserveScrollBarGap : true ,
251263 allowTouchMove : ( el ) => {
252264 while ( el && el !== document . body ) {
0 commit comments