Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2012, 22:33
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

как запретить скролл документа
Как запретить скролл всего документа если прокручивать конкретный элемент?

Чтобы была возможность скроллить внутри элемента и это не всплывало на весь документ....

Почему не работает функция запрета всплытия, но ведь скролл всплывает наверх:

stopPropagation = function (event) {
    if (event.stopPropagation) {
        event.stopPropagation();
    } else {
        event.cancelBubble = true;
    }
}

Последний раз редактировалось dmitry111, 07.12.2012 в 23:59.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2012, 14:31
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

какой ещё может быть способ кроме отмены действия стандартного?
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2012, 23:33
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Все таки не нашел решения..
Скролл документа пропадает если задать боди overflow: hidden
element.onmousewheel = function () {
    document.body.style.overflow = 'hidden';
};

Может возможно как то запретить скролл во всем документе, кроме конкретного элемента по-другому (без использования стилей)?

Последний раз редактировалось dmitry111, 07.12.2012 в 23:40.
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2012, 02:00
Аспирант
Отправить личное сообщение для schmetterling Посмотреть профиль Найти все сообщения от schmetterling
 
Регистрация: 02.12.2012
Сообщений: 30

Сообщение от dmitry111
Может возможно как то запретить скролл во всем документе, кроме конкретного элемента по-другому (без использования стилей)?
<html>
<body>
<div style="height: 1000px;">bla</div>
<script>
document.addEventListener(
    "scroll",
    function(e){
      alert("Событие возможно отменить? " + e.cancelable);
    },
    true)
</script>
</body>
</html>


Спецификация(

Последний раз редактировалось schmetterling, 08.12.2012 в 02:03.
Ответить с цитированием
  #5 (permalink)  
Старый 08.12.2012, 08:32
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

schmetterling,

а если mousewheel то тру. Я имею в виду только события мыши, а не полный скролл
<html>
<body>
<div style="height: 1000px;">bla</div>
<script>
document.addEventListener(
    "mousewheel",
    function(e){
      alert("Событие возможно отменить? " + e.cancelable);
    },
    true)
</script>
</body>
</html>

Последний раз редактировалось dmitry111, 08.12.2012 в 08:35.
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2012, 08:40
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сейчас посмотрел во вконтактике прокрутка запрещается с помощью
document.body.style.overflow = 'hidden';

так и сделаю
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2012, 10:06
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Вот сделал на скорую руку. Когда мышь над дивом - скролл у боди отсутствует
Интересует мнение, как это будет работать если в этих дивах буду дочерние элементы и боди будет заполнен

<!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

Последний раз редактировалось dmitry111, 08.12.2012 в 10:28.
Ответить с цитированием
  #8 (permalink)  
Старый 08.12.2012, 12:38
Аспирант
Отправить личное сообщение для schmetterling Посмотреть профиль Найти все сообщения от schmetterling
 
Регистрация: 02.12.2012
Сообщений: 30

Сообщение от dmitry111
а если mousewheel то тру. Я имею в виду только события мыши, а не полный скролл
Тогда его можно отменить с помощью event.preventDefault(); Правда, как я помню, не очень-то mousewheel поддерживается(

Сообщение от dmitry111
По идее onmouseout должен срабатывать при попадании на дочерний элемент элемент у div1
Нет, почему, ведь эти элементы -- тоже часть div1.

А с overflow: hidden может быть такой косяк, что будет прыгать страница влево-вправо, т.к. скроллбар исчезать будет.
Ответить с цитированием
  #9 (permalink)  
Старый 08.12.2012, 13:59
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от schmetterling
Тогда его можно отменить с помощью event.preventDefault();
оно отменит событие в самом окне, а не в документе

Сообщение от schmetterling
Правда, как я помню, не очень-то mousewheel поддерживается(
не поддерживается в firefox. Там есть DOMMouseScroll, MozMousePixelScroll

Сообщение от schmetterling
Нет, почему, ведь эти элементы -- тоже часть div1.
но это уже не div1, поэтому должен сработать mouseout, но он не срабатывает. Тут так написано

Сообщение от schmetterling
А с overflow: hidden может быть такой косяк, что будет прыгать страница влево-вправо, т.к. скроллбар исчезать будет.
можно делать только по y - overflow-y: hidden
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
вопрос по jquery. Одновременно выполняющиеся события. как запретить одно? vuler Общие вопросы Javascript 5 23.03.2012 16:27
Как узнать, присутствует ли в окне полоса прокрутки или нет? возжаждавший Элементы интерфейса 6 12.03.2010 23:00
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57
Как запретить уход из фрейма в top-окно? sturm Общие вопросы Javascript 6 20.04.2008 04:20