как запретить скролл документа
Как запретить скролл всего документа если прокручивать конкретный элемент?
Чтобы была возможность скроллить внутри элемента и это не всплывало на весь документ.... Почему не работает функция запрета всплытия, но ведь скролл всплывает наверх: stopPropagation = function (event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } } |
какой ещё может быть способ кроме отмены действия стандартного?
|
Все таки не нашел решения..
Скролл документа пропадает если задать боди overflow: hidden element.onmousewheel = function () { document.body.style.overflow = 'hidden'; }; Может возможно как то запретить скролл во всем документе, кроме конкретного элемента по-другому (без использования стилей)? |
Цитата:
<html> <body> <div style="height: 1000px;">bla</div> <script> document.addEventListener( "scroll", function(e){ alert("Событие возможно отменить? " + e.cancelable); }, true) </script> </body> </html> Спецификация( |
schmetterling,
а если mousewheel то тру. Я имею в виду только события мыши, а не полный скролл <html> <body> <div style="height: 1000px;">bla</div> <script> document.addEventListener( "mousewheel", function(e){ alert("Событие возможно отменить? " + e.cancelable); }, true) </script> </body> </html> |
Сейчас посмотрел во вконтактике прокрутка запрещается с помощью
document.body.style.overflow = 'hidden'; так и сделаю |
Вот сделал на скорую руку. Когда мышь над дивом - скролл у боди отсутствует
Интересует мнение, как это будет работать если в этих дивах буду дочерние элементы и боди будет заполнен <!DOCTYPE HTML> <html> <head> <style> div { width: 60px; height: 60px; margin: 100px; } </style> </head> <body style="height:1000px"> <div id="a" style="background:#f00"></div> <div id="b" style="background:#ff0"></div> <div id="c" style="background:#f0f"></div> <div id="d" style="background:#0ff"></div> <div id="e" style="background:#00f"></div> <script> function offScroll () { document.body.style.overflow = "hidden"; this.onmouseout = function () { document.body.style.overflow = "auto"; }; } document.getElementById("a").onmouseover = function () { offScroll(); }; document.getElementById("b").onmouseover = function () { offScroll(); }; document.getElementById("c").onmouseover = function () { offScroll(); }; document.getElementById("d").onmouseover = function () { offScroll(); }; document.getElementById("e").onmouseover = function () { offScroll(); }; </script> </body> </html> этот же пример в ссылке http://learn.javascript.ru/play/oOxmqb По идее onmouseout должен срабатывать при попадании на дочерний элемент элемент у div1 (линк), но этого не происходит, почему? <!DOCTYPE HTML> <html> <head> <style> #div1 { width: 200px; height: 200px; margin: 50px auto; background: #000; position: relative; } #div2 { width: 180px; height: 180px; background: #f00; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; } #div3 { width: 160px; height: 160px; background: #0f0; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; } #div4 { width: 140px; height: 140px; background: #00f; position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin: auto; } </style> </head> <body style="height:1000px;"> <div id="div1"> <div id="div2"> <div id="div3"> <div id="div4"></div> </div> </div> </div> <script> function offScroll () { document.body.style.overflow = "hidden"; this.onmouseout = function () { document.body.style.overflow = "auto"; }; } document.getElementById("div1").onmouseover = function () { offScroll(); }; </script> </body> </html> этот же пример в ссылке http://learn.javascript.ru/play/Yt9EMb |
Цитата:
Цитата:
А с overflow: hidden может быть такой косяк, что будет прыгать страница влево-вправо, т.к. скроллбар исчезать будет. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 20:32. |