Модальное окно, запретить скролл всему документу на чистом JS
Добрый вечер.
Только изучаю JS, реализовал на чистом JS всплывающие окна с полным функционалом, но не могу запретить сролл всего документа во время скролла модального окна.
<style type="text/css">
.black_window {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
filter: alpha(opacity=0)
-moz-opacity: 0;
opacity: 0;
z-index: 2;
}
.content {
position: relative;
width: 60%;
max-width: 550px;
min-height: 300px;
margin: 0 auto;
z-index: 3;
filter: alpha(opacity=100)
-moz-opacity: 1;
opacity: 1;
}
</style>
<ul>
<li>Ссылка на 1 окно</li>
...
<li>Ссылка на последнее окно</li>
</ul>
<div class="size_window">
<div class="black_window">
<div class="content">Ссылка на 1 окно</div>
...
<div class="content">Ссылка на последнее окно</div>
</div>
</div>
.size_window - это высота всплывающего окна которую принимает div (.main_block), в который обернут весь сайт, когда модальное окно открыто, и ему я присваиваю overflow:hidden; .black_window - затемнитель фиксированный. .content - тело окна с высотой в зависимости от контента внутри. Скролить .content могу привязав к обработчику события скрола через свойство top, при position:relative блока content.
var scrolled = window.pageYOffset || document.documentElement.scrollTop;
if(parseInt(window.getComputedStyle(main_block, null).height) - window.innerHeight - scrolled) > 0)){
content.style.top = -scrolled + 35 + 'px';
main_block.style.top = scrolled + 'px';
}
Когда скролл подходит к концу страницы, main_block уезжает вверх, не знаю как иначе запретить скролл основного контента на чистом JS |
TommyWork,
интересно, кто это сможет осилить ... ? но думаю где-то в mousewheel модального окна нужно добавить stopPropagation() |
body{
overflow: hidden; } |
e.stopPropagation(); не срабатывает, помогает e.preventDefault(); но тогда модальное окно тоже не скролится даже через отступы CSS
|
TommyWork,
а макет можно сделать? |
В смысле?
|
TommyWork,
как увидеть то что вы описали? |
function onWheel(e) {
var delta = e.deltaY || e.detail || e.wheelDelta;
if(delta > 0 ? this.scrollTop < this.scrollHeight - this.clientHeight : this.scrollTop > 0) {
this.scrollTop += 100 * (delta > 0 || -1);
e.preventDefault();
}
}
modal.addEventListener('wheel', onWheel);
modal.addEventListener('mousewheel', onWheel);
|
Ruslan_xDD,
вопрос: зачем нужна строка 3? |
| Часовой пояс GMT +3, время: 00:51. |