Skip to content

Commit c8513cd

Browse files
committed
prevent body scrolling without overflow hidden
1 parent 8788a31 commit c8513cd

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

js/modal.js

+41-1
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,45 @@
277277
}
278278
}
279279

280+
_preventDefault(e) {
281+
e.preventDefault();
282+
}
283+
284+
_preventWheelDefault(e) {
285+
let modalEl = this;
286+
let scrolledToBottom = modalEl.offsetHeight + modalEl.scrollTop >= modalEl.scrollHeight;
287+
let scrolledToTop = modalEl.scrollTop === 0;
288+
if ((scrolledToTop && e.deltaY < 0) || (scrolledToBottom && e.deltaY > 0)) {
289+
e.preventDefault();
290+
}
291+
}
292+
293+
preventBodyScrolling() {
294+
let modalEl = this.$el[0];
295+
// modalEl.setAttribute('tabindex', 0);
296+
// this.$el[0].focus();
297+
298+
this.$overlay[0].addEventListener('wheel', this._preventDefault);
299+
this.$overlay[0].addEventListener('touchmove', this._preventDefault);
300+
modalEl.addEventListener('wheel', this._preventWheelDefault);
301+
302+
// modalEl.addEventListener("keydown", function(e) {
303+
// let scrolledToBottom = modalEl.offsetHeight + modalEl.scrollTop >= modalEl.scrollHeight;
304+
// let scrolledToTop = modalEl.scrollTop === 0;
305+
// if (e.target === modalEl && [37, 39].indexOf(e.keyCode) > -1 ||
306+
// (e.keyCode === 38 && scrolledToTop) ||
307+
// ([32, 40].indexOf(e.keyCode) > -1 && scrolledToBottom)) {
308+
// e.preventDefault();
309+
// }
310+
// });
311+
}
312+
313+
enableBodyScrolling() {
314+
this.$overlay[0].removeEventListener('wheel', this._preventDefault);
315+
this.$overlay[0].removeEventListener('touchmove', this._preventDefault);
316+
this.$el[0].removeEventListener('wheel', this._preventWheelDefault);
317+
}
318+
280319
/**
281320
* Open Modal
282321
* @param {jQuery} [$trigger]
@@ -288,7 +327,6 @@
288327

289328
this.isOpen = true;
290329
let body = document.body;
291-
body.style.overflow = 'hidden';
292330
this.$el[0].classList.add('open');
293331
body.appendChild(this.$overlay[0]);
294332

@@ -302,6 +340,7 @@
302340
}
303341

304342
this.animateIn();
343+
this.preventBodyScrolling();
305344

306345
return this;
307346
}
@@ -323,6 +362,7 @@
323362
}
324363

325364
this.animateOut();
365+
this.enableBodyScrolling();
326366

327367
return this;
328368
}

0 commit comments

Comments
 (0)