Skip to content
This repository was archived by the owner on Jan 9, 2022. It is now read-only.

Commit f683abc

Browse files
committed
fix: fix enabling scroll with nested dialogs
1 parent cecd4da commit f683abc

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/components/GDialog.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export default defineComponent({
146146
'g-dialog-frame',
147147
{
148148
'g-dialog-frame--active': isActive.value,
149+
'g-dialog-frame--fullscreen': props.fullscreen,
149150
},
150151
])
151152
@@ -156,7 +157,9 @@ export default defineComponent({
156157
const { enableScroll, disableScroll } = useScroll({
157158
overlay: overlayElement,
158159
content: contentFrame,
160+
contentActiveClass: 'g-dialog-frame--active',
159161
fullscreen: props.fullscreen,
162+
contentFullscreenClass: 'g-dialog-frame--fullscreen',
160163
})
161164
162165
watch(isActive, (active) => {

src/composable/scroll.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ import { noScrollableParent, getScrollbarWidth } from '../helper/scroll.helper'
55
type ScrollParams = {
66
overlay: Ref<Element | undefined>
77
content: Ref<Element | undefined>
8+
contentActiveClass: string
89
fullscreen: boolean
10+
contentFullscreenClass: string
911
}
1012

1113
export const useScroll = ({
1214
overlay,
1315
content,
16+
contentActiveClass,
1417
fullscreen,
18+
contentFullscreenClass,
1519
}: ScrollParams) => {
1620
let disabled = false
1721
let disableType: 'byEvents' | 'byOverflow'
@@ -25,15 +29,17 @@ export const useScroll = ({
2529
}
2630
}
2731

32+
const scrollbarWidth = getScrollbarWidth()
33+
const zeroScrollBar = scrollbarWidth === 0
34+
2835
const disableScroll = () => {
2936
if(disabled) {
3037
return
3138
}
3239

33-
const scrollbarWidth = getScrollbarWidth()
34-
35-
// The mobile has a scroll bar width of 0
36-
if (scrollbarWidth === 0 || fullscreen) {
40+
// The mobile has the scroll bar width of 0
41+
// hide the scroll bar for fullscreen mode
42+
if (zeroScrollBar || fullscreen) {
3743
disableType = 'byOverflow'
3844
document.documentElement.classList.add('overflow-y-hidden')
3945
} else {
@@ -54,7 +60,12 @@ export const useScroll = ({
5460
if(disableType === 'byEvents') {
5561
window.removeEventListener('wheel', eventListener)
5662
}else if (disableType === 'byOverflow') {
57-
document.documentElement.classList.remove('overflow-y-hidden')
63+
const activeContentElements = document.getElementsByClassName(contentActiveClass)
64+
const activeFullscreenContentElements = document.getElementsByClassName(contentFullscreenClass)
65+
66+
if((!zeroScrollBar && fullscreen && activeFullscreenContentElements.length === 1) || activeContentElements.length === 1) {
67+
document.documentElement.classList.remove('overflow-y-hidden')
68+
}
5869
}
5970

6071
disabled = false

0 commit comments

Comments
 (0)