Используя jQuery, я бы хотел отключить прокрутку тела:
Моя идея состоит в том, чтобы:
- Устанавливать
body{ overflow: hidden;}
- Захватить текущий
scrollTop();/scrollLeft()
- Привязать к событию прокрутки тела, установите scrollTop / scrollLeft в захваченное значение.
Есть ли способ лучше?
Обновить:
Пожалуйста, посмотрите мой пример и причину, по которой, на http://jsbin.com/ikuma4/2/edit
Я знаю, что кто-то подумает: «Почему он не просто использует position: fixed
панель?».
Пожалуйста, не предлагайте это, поскольку у меня есть другие причины.
Ответы:
Единственный способ сделать это похож на то, что вы описали:
Затем, когда вы будете готовы снова разрешить прокрутку, отмените все это.
Изменить: нет причин, я не могу дать вам код, так как я попытался выкопать его ...
источник
auto
, оно будет перезаписано. Мне нужно было сохранить существующую настройку, так что это добавляет некоторые накладные расходы.html
иbody
сoverflow: hidden
недостаточно? Нам все еще нужен обработчик событий.Это полностью отключит прокрутку:
Восстановить:
Протестировал его на Firefox и Chrome.
источник
height: 100%
эффективно блокирует прокрутку в текущей позиции без прыжков - по крайней мере, на последнем Chrome.попробуй это
источник
$('#element').off('scroll touchmove mousewheel');
body
прокрутку, но разрешить прокрутку внутри других дочерних элементовoverflow: scroll
?Я просто привожу небольшую настройку решения от tfe . В частности, я добавил некоторые дополнительные элементы управления, чтобы гарантировать отсутствие смещения содержимого страницы (или сдвига страницы ), когда полоса прокрутки установлена в
hidden
.Две функции Javascript
lockScroll()
иunlockScroll()
могут быть определены, соответственно, для блокировки и разблокировки прокрутки страницы.где я предположил, что
<body>
не имеет начальной маржи.Обратите внимание, что, хотя вышеупомянутое решение работает в большинстве практических случаев, оно не является окончательным, поскольку оно требует некоторой дополнительной настройки для страниц, которые включают, например, заголовок с
position:fixed
. Давайте перейдем к этому частному случаю с примером. Предположим, чтобы иметьс участием
Затем следует добавить следующее в функции
lockScroll()
иunlockScroll()
:Наконец, позаботьтесь о возможном начальном значении полей или отступов.
источник
marginRight
иmarginLeft
:)Вы можете использовать этот код:
источник
Чтобы отключить прокрутку, попробуйте это:
сбросить:
источник
Я написал плагин jQuery для обработки этого: $ .disablescroll .
Он предотвращает прокрутку от событий колесика мыши, касания и нажатия клавиш, например Page Down.
Здесь есть демо .
Использование:
источник
Вы можете прикрепить функцию для прокрутки событий и предотвращения ее поведения по умолчанию.
https://jsfiddle.net/22cLw9em/
источник
Один вкладыш для отключения прокрутки, включая среднюю кнопку мыши.
edit : в любом случае нет необходимости в jQuery, ниже, как и в vanilla JS (это означает, что нет фреймворков, только JavaScript):
this.documentElement.scrollTop - стандартный
this.body.scrollTop - IE совместимость
источник
$("body").css("overflow", "hidden");
$("body").css("overflow", "initial");
источник
Разве вы не можете просто установить рост на 100% и скрыть переполнение? Смотрите http://jsbin.com/ikuma4/13/edit
источник
Кто-то опубликовал этот код, у которого есть проблема не сохранения позиции прокрутки при восстановлении. Причина в том, что люди склонны применять его к html и body или просто к телу, но его следует применять только к html. Таким образом, при восстановлении положение прокрутки будет сохранено:
Восстановить:
источник
'overflow': 'auto',
использовать'overflow': 'initial',
Это может или не может работать для ваших целей, но вы можете расширить jScrollPane для запуска других функций, прежде чем он выполняет прокрутку. Я только что проверил это немного, но я могу подтвердить, что вы можете подключиться и полностью предотвратить прокрутку. Все, что я сделал, было:
<script type="text/javascript" src="script/jquery.jscrollpane.js"></script>
positionDragY(destY, animate)
функцииЗапустите events.html, и вы увидите нормально прокручивающийся блок, который из-за вашего вмешательства в кодирование не будет прокручиваться.
Таким способом вы можете управлять полосами прокрутки всего браузера (см. Fullpage_scroll.html).
Итак, предположительно, следующим шагом является добавление вызова к какой-либо другой функции, которая отключается и выполняет магию привязки, а затем решает, продолжать ли прокрутку или нет. У вас также есть вызовы API для установки scrollTop и scrollLeft.
Если вам нужна дополнительная помощь, напишите, где вы находитесь до!
Надеюсь, это помогло.
источник
Я поставил ответ, который может помочь здесь: jQuery simplemodal отключить прокрутку
Он показывает, как отключить полосы прокрутки без смещения текста. Вы можете игнорировать части о simplemodal.
источник
Если вы просто хотите отключить прокрутку с помощью навигации по клавиатуре, вы можете отменить событие нажатия клавиши.
источник
Попробуйте этот код:
источник
Вы можете закрыть окно прокручиваемым div для предотвращения прокрутки содержимого на странице. И, скрывая и показывая, вы можете заблокировать / разблокировать свой свиток.
Сделайте что-то вроде этого:
источник
Для людей, которые имеют центрированные макеты (через
margin:0 auto;
), здесь приведен списокposition:fixed
решений вместе с предлагаемым решением @tfe .Используйте это решение, если вы испытываете щелчок страницы (из-за показа / скрытия полосы прокрутки).
…в сочетании с…
... и, наконец, CSS для
.modal-noscroll
...Я бы рискнул сказать , что это более полное решение , чем любой из других решений там, но я не проверял , что полностью еще ...: P
Изменить: обратите внимание, что я понятия не имею, насколько плохо это может работать (читай: взорвать) на сенсорном устройстве.
источник
Вы также можете использовать DOM для этого. Скажем, у вас есть функция, которую вы вызываете так:
И это все, что нужно сделать! Надеюсь, что это помогает в дополнение ко всем другим ответам!
источник
Это то, что я в итоге сделал:
CoffeeScript:
Javascript:
источник
Не уверен, что кто-нибудь попробовал мое решение. Этот работает для всего тела / html, но, без сомнения, он может быть применен к любому элементу, который запускает событие прокрутки.
Просто установите и снимите scrollLock, как вам нужно.
Вот пример JSFiddle
Надеюсь, этот поможет кому-нибудь.
источник
Я думаю, что лучшее и чистое решение:
И с помощью jQuery:
Эти прослушиватели событий должны блокировать прокрутку. Просто удалите их, чтобы снова включить прокрутку
источник