Как отключить прокрутку тела документа? - PullRequest
21 голосов
/ 18 марта 2010

У меня есть HTML, который имеет много контента, и вертикальная полоса прокрутки появляется, как только HTML загружен. Теперь из этого HTML загружается полноэкранный IFRAME. Проблема в том, что когда IFRAME загружен, родительская полоса прокрутки по-прежнему сохраняется, я хочу отключить полосу прокрутки при загрузке Iframe.

Я пытался:

  • document.body.scroll = "no", он не работал с FF и хромом.
  • document.style.overflow = "hidden"; после этого я все еще мог прокручивать, и весь iframe прокручивался вверх, открывая родительский HTML.

Мое требование: при загрузке IFRAME мы никогда не сможем прокрутить весь IFRAME, если в родительском HTML есть полоса прокрутки.

Есть идеи?

Ответы [ 6 ]

29 голосов
/ 18 марта 2010

Если вы хотите использовать полосу прокрутки iframe, а не родительские, используйте это:

document.body.style.overflow = 'hidden';

Если вы хотите использовать полосу прокрутки родителя, а не iframe, вам нужно использовать:

document.getElementById('your_iframes_id').scrolling = 'no';

или установите атрибут scrolling="no" в теге iframe: <iframe src="some_url" scrolling="no">.

9 голосов
/ 17 февраля 2014

с CSS

body,html{
  overflow:hidden
}
5 голосов
/ 02 августа 2013

Может работать следующий JavaScript:

var page = $doc.getElementsByTagName('body')[0];

Чтобы отключить прокрутку, используйте:

page.classList.add('noscroll');

Для включения прокрутки используйте:

page.classList.remove('noscroll');

В файле CSS добавьте:

.noscroll {
    position: fixed!important
}
2 голосов
/ 30 октября 2016

добавить эту css

body.disable-scroll {
    overflow: hidden;
}

и когда отключить, запустить этот код

$("body").addClass("disable-scroll");

и когда включить, запустить этот код

$("body").removeClass("disable-scroll")
0 голосов
/ 24 февраля 2019

Я знаю, что это древний вопрос, но я просто подумал, что буду взвешивать.

Я использую disableScroll .Просто и работает как во сне.

У меня возникли проблемы с отключением прокрутки на теле, но разрешением его на дочерних элементах (например, на модальной или боковой панели).Похоже, что-то может быть сделано с помощью disableScroll.on([element], [options]);, но я пока не получил это работать.


Причина, по которой это предпочтительнее по сравнению с overflow: hidden; на теле, заключается в том, что скрытое переполнение может стать неприятным, поскольку некоторые вещи могут добавить overflow: hidden;, например:

... Это хорошо для предварительных загрузчиков и т. Д., Поскольку они отображаются до завершения загрузки CSS.

Но это создает проблемы, когда открытая навигация должна добавить класс к тегу body (например, <body class="body__nav-open">).И тогда это превращается в одно большое перетягивание каната с overflow: hidden; !important и всеми видами дерьма.

0 голосов
/ 25 января 2014

Ответ: document.body.scroll = 'no';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...