|
277 | 277 | }
|
278 | 278 | }
|
279 | 279 |
|
| 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 | + |
280 | 319 | /**
|
281 | 320 | * Open Modal
|
282 | 321 | * @param {jQuery} [$trigger]
|
|
288 | 327 |
|
289 | 328 | this.isOpen = true;
|
290 | 329 | let body = document.body;
|
291 |
| - body.style.overflow = 'hidden'; |
292 | 330 | this.$el[0].classList.add('open');
|
293 | 331 | body.appendChild(this.$overlay[0]);
|
294 | 332 |
|
|
302 | 340 | }
|
303 | 341 |
|
304 | 342 | this.animateIn();
|
| 343 | + this.preventBodyScrolling(); |
305 | 344 |
|
306 | 345 | return this;
|
307 | 346 | }
|
|
323 | 362 | }
|
324 | 363 |
|
325 | 364 | this.animateOut();
|
| 365 | + this.enableBodyScrolling(); |
326 | 366 |
|
327 | 367 | return this;
|
328 | 368 | }
|
|
0 commit comments