как запретить скролл документа
Как запретить скролл всего документа если прокручивать конкретный элемент?
Чтобы была возможность скроллить внутри элемента и это не всплывало на весь документ.... Почему не работает функция запрета всплытия, но ведь скролл всплывает наверх:
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, время: 07:12. |