Skip to content

Commit 2038f50

Browse files
authored
refactor: modal allow disabling scroll lock at page width (#590)
1 parent e988952 commit 2038f50

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

resources/assets/js/modal.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ const Modal = {
1111
previousNavPaddingRight: undefined,
1212
trappedElement: null,
1313
trappedFocus: null,
14+
bodyResizeDisableScrollLockHandler: null,
1415

1516
defaultSettings: {
1617
reserveScrollBarGap: true,
1718
reserveNavScrollBarGap: true,
1819
disableFocusTrap: false,
20+
disableScrollLockAtWidth: null,
1921
},
2022

2123
disableBodyScroll(scrollable, settings = {}) {
@@ -59,6 +61,23 @@ const Modal = {
5961
this.trapFocus(scrollable);
6062
}
6163
}, 50);
64+
65+
if (settings.disableScrollLockAtWidth !== null) {
66+
this.bodyResizeDisableScrollLockHandler = () => {
67+
settings = Object.assign({}, this.defaultSettings, settings);
68+
69+
if (window.innerWidth >= settings.disableScrollLockAtWidth) {
70+
enableBodyScroll(scrollable, settings);
71+
} else {
72+
disableBodyScroll(scrollable, settings);
73+
}
74+
};
75+
76+
window.addEventListener(
77+
"resize",
78+
this.bodyResizeDisableScrollLockHandler
79+
);
80+
}
6281
},
6382

6483
onModalClosed(scrollable, settings = {}) {
@@ -69,6 +88,15 @@ const Modal = {
6988
if (!document.querySelectorAll("[data-modal]").length) {
7089
clearAllBodyScrollLocks();
7190
}
91+
92+
if (this.bodyResizeDisableScrollLockHandler !== null) {
93+
window.removeEventListener(
94+
"resize",
95+
this.bodyResizeDisableScrollLockHandler
96+
);
97+
98+
this.bodyResizeDisableScrollLockHandler = null;
99+
}
72100
},
73101

74102
trapFocus(el) {

resources/views/modal.blade.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
'wrapperClass' => 'modal-content-wrapper',
1919
'contentClass' => 'modal-content',
2020
'disableOverlayClose' => false,
21+
'disableScrollLockAtWidth' => null,
2122
])
2223

2324
@php
@@ -42,7 +43,9 @@
4243
@else
4344
data-modal
4445
@endif
45-
x-data="Modal.livewire({{ $xData }})"
46+
x-data="Modal.livewire({{ $xData }}, {
47+
disableScrollLockAtWidth: {{ $disableScrollLockAtWidth }},
48+
})"
4649
@if(!$closeButtonOnly && $wireClose && ! $disableOverlayClose)
4750
@mousedown.self="$wire.{{ $wireClose }}()"
4851
@endif

0 commit comments

Comments
 (0)