разрешить прокрутку страницы (обратное действие):
Мне без js никак , т.к. мне например фон нужно в лево подвинуть а в html overflow обрезает её к херам и остаётся белый фон
Круть! Респект автору
proger :
Не проще ли overflow:hidden на body повесить?
Не проще! Т.к. во первых overflow:hidden может не работать в некоторых браузерах, и во вторых этот код запрещает еще и прокурутку стрелками(!!) вверх вниз
Есть div с фиксированным позиционированием и overflow: auto . В блоке прокручивается текст колесом мыши. После того, как весь текст в блоке прокручен, начинает скролиться страница. Как запретить прокрутку body , пока курсор находится в div-е ?
Используя jQuery, я бы хотел отключить прокрутку тела:
Моя идея состоит в том, чтобы:
- Установить body
- Захват текущего scrollTop();/scrollLeft()
- Привязать к событию прокрутки тела, установите scrollTop / scrollLeft в захваченное значение.
Есть ли способ лучше?
Пожалуйста, посмотрите мой пример и причину, по которой, на http://jsbin.com/ikuma4/2/edit
Я знаю, что кто-то подумает: «Почему он не просто использует position: fixed на панели?».
Пожалуйста, не предлагайте это, поскольку у меня есть другие причины.
22 ответа
Единственный способ, который я нашел для этого, похож на то, что вы описали:
- Возьмите текущую позицию прокрутки (не забудьте горизонтальную ось!).
- Установите переполнение скрытым (вероятно, хотите сохранить предыдущее значение переполнения).
- Прокрутите документ до сохраненной позиции прокрутки с помощью scrollTo ().
Затем, когда вы будете готовы снова прокрутить, отмените все это.
Изменить: нет причин, я не могу дать вам код, так как я попытался выкопать его .
Это полностью отключит прокрутку:
Протестировал его на Firefox и Chrome.
Вы можете использовать этот код:
Я просто привожу небольшую настройку решения от tfe . В частности, я добавил некоторые дополнительные элементы управления, чтобы гарантировать отсутствие смещения содержимого страницы (или сдвига страницы ), когда полоса прокрутки установлена в hidden .
Две функции JavaScript JavaScript lockScroll() и unlockScroll() могут быть определены соответственно для блокировки и разблокировки прокрутки страницы.
где я предположил, что у нет начального поля.
Обратите внимание, что, хотя вышеупомянутое решение работает в большинстве практических случаев, оно не является окончательным, поскольку оно требует некоторой дополнительной настройки для страниц, которые включают, например, заголовок с position:fixed . Давайте перейдем к этому особому случаю с примером. Предположим, чтобы иметь
Затем в функции lockScroll() и unlockScroll() необходимо добавить следующее:
Наконец, позаботьтесь о возможном начальном значении полей или отступов.
Чтобы отключить прокрутку, попробуйте это:
Я написал плагин jQuery для обработки этого: $ .disablescroll .
Он предотвращает прокрутку от событий колесика мыши, касания и нажатия клавиш, таких как Page Down .
Здесь есть демо .
Вы можете прикрепить функцию для прокрутки событий и предотвращения ее поведения по умолчанию.
Один вкладыш для отключения прокрутки, включая среднюю кнопку мыши.
edit : в любом случае нет необходимости в jQuery, ниже, как и в vanilla JS (это означает, что нет фреймворков, просто JavaScript):
this.body.scrollTop — IE совместимость
Разве вы не можете просто установить рост на 100% и скрыть переполнение? Смотрите http://jsbin.com/ikuma4/13/edit
Это может или не может работать для ваших целей, но вы можете расширить jScrollPane для запуска других функций, прежде чем он выполняет прокрутку. Я только что проверил это немного, но я могу подтвердить, что вы можете подключиться и полностью предотвратить прокрутку. Все, что я сделал, было:
- Загрузите демонстрационный zip-архив: http://github.com/vitch/jScrollPane/archives/master
- Откройте демо "События" (events.html)
- Отредактируйте его, чтобы использовать неминифицированный источник скрипта:
- В jquery.jscrollpane.js вставьте «возврат»; в строке 666 (благоприятный номер строки! но если ваша версия немного отличается, это первая строка функции positionDragY(destY, animate)
Запустите events.html, и вы увидите нормально прокручивающийся блок, который из-за вашего вмешательства в кодирование не будет прокручиваться.
Таким способом вы можете управлять полосами прокрутки всего браузера (см. Fullpage_scroll.html).
Итак, предположительно, следующим шагом является добавление вызова к какой-либо другой функции, которая отключается и выполняет магию привязки, а затем решает, продолжать ли прокрутку или нет. У вас также есть вызовы API для установки scrollTop и scrollLeft.
Если вам нужна дополнительная помощь, напишите, где вы находитесь до!