javascript — Блокировка скроллинга страницы при скроллинге дочернего DIV`a?
Есть чат с фиксированным позиционированием, визуально отображается поверх страницы, мне необходимо заблокировать скроллинг страницы, в тот момент, когда скроллинг внутри чата доходит до верхнего или нижнего предела, сейчас при прокрутке колесиком мыши сообщений чата по достижении начала или конца начинает прокручиваться весь сайт.
Пожалуйста, не предлагайте скрывать скролл-бар:
body { overflow: hidden; }
Мне необходимо заблокировать скроллинг, когда курсор мыши находится над чатом.
Для наглядности прикладываю скрин чата с сайта:
- javascript
- html
- jquery
- css
- scroll
Можно сделать и блок с контеном и чат fixed, как-то так:
/* page-wrapper нужен, чтобы можно было позиционироваться абсолютно относительно page. */ .page-wrapper { position: fixed; top: 0; left: 0; width: 100%; height: 100%; overflow: auto; } .page { position: relative; } .article { height: 5000px; } .test { position: absolute; left: 10px; bottom: 0; width: 100px; height: 25px; background: green; } .chat { position: fixed; overflow: auto; bottom: 0; right: 0; width: 100px; height: 100px; background: red; } .chat-content { height: 5000px; }
<div> <div> <div>article</div> <div>test</div> </div> </div> <div> <div>chat-content</div> </div>
Так внешний же по умолчанию скроллиться не будет, пока скроллится вложенный.
18
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
overscroll-behavior — CSS | MDN
CSS-свойство overscroll-behavior
— это сокращение для свойств overscroll-behavior-x
(en-US)
overscroll-behavior-y
(en-US), которые позволяют управлять поведением прокрутки при достижении границы области прокрутки./* Значения-ключевые слова */ overscroll-behavior: auto; /* по умолчанию */ overscroll-behavior: contain; overscroll-behavior: none; /* Двойное значение */ overscroll-behavior: auto contain; /* Глобальные значения */ overflow: inherit; overflow: initial; overflow: unset;
По умолчанию мобильные браузеры, как правило, обеспечивают эффект «отскока» или даже обновляют страницу при достижении её верхней или нижней части (или другой области прокрутки). Возможно, вы также замечали, что когда поверх страницы с прокруткой расположено диалоговое окно с прокруткой, то при достижении границы прокрутки диалогового окна нижележащая страница начинает прокручиваться. Это называется цепочкой прокрутки (scroll chaining, англ.)
В некоторых случаях такое поведение нежелательно. Вы можете использовать overscroll-behavior
, чтобы избавиться от нежелательных цепочек прокрутки и поведения страниц браузера по принципу «потяните, чтобы обновить» (pull to refresh, англ.), характерного, например, для приложений Facebook и Twitter.
Начальное значение | auto |
---|---|
Применяется к | не заменяемые блочные и inline-block элементы |
Наследуется | нет |
Обработка значения | как и у каждого из подсвойств этого свойства:
|
Animation type | discrete |
Свойство overscroll-behavior
задаётся в виде одного или двух ключевых слов, выбранных из списка значений ниже.
Два ключевых слова определяют значение
по осям x
и y
соответственно. Если задано только одно значение, то предполагается, что и x
, и y
одинаковы.
Значения
auto
Поведение по умолчанию.
contain
Поведение для
overscroll-behavior
применяется внутри элемента, для которого установлено это значение (например, эффекты «отскока» или обновления), но не возникают цепочки прокрутки для соседних областей прокрутки, например, нижележащие элементы не будут прокручиваться.none
Не происходит цепочки прокрутки в соседних областях прокрутки, и по умолчанию предотвращается достижение границы области прокрутки.
Формальный синтаксис
overscroll-behavior =
[ (en-US) contain | (en-US) none | (en-US) auto ] (en-US){1,2} (en-US)
В нашем примере overscroll-поведения (см. также код по ссылке ) представлен полностраничный список поддельных контактов и диалоговое окно с чатом.
Обе эти области прокручиваются; обычно, если вы прокручиваете окно чата до тех пор, пока не достигнете границы прокрутки, нижележащее окно контактов тоже начнёт прокручиваться, что нежелательно.
overscroll-behavior-y
(overscroll-behavior
также подойдет) для окна чата, как показано ниже:.messages { height: 220px; overflow: auto; overscroll-behavior-y: contain; }
Мы также хотим избавиться от стандартного overscroll-эффекта при прокрутке контактов вверх или вниз (например, Chrome на Android обновляет страницу при прокрутке за пределы верхней границы). Это можно предотвратить, установив для элемента
значение overscroll-behavior: none
:
body { margin: 0; overscroll-behavior: none; }
Пока CSSWG не опубликует свой собственный вариант, спецификация может быть найдена толькона Github в репозитории WICG.
Specification | Status | Comment |
---|---|---|
Unknown Определение ‘overscroll-behavior’ в этой спецификации. | Неизвестно |
BCD tables only load in the browser with JavaScript enabled.
- Take control of your scroll: customizing pull-to-refresh and overflow effects
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
Want to get more involved?
Learn how to contribute.
This page was last modified on by MDN contributors.
css — запретить прокрутку фоновых изображений
спросил
Изменено 12 лет, 4 месяца назад
Просмотрено 8к раз
Ссылка на страницу: http://www.northtreestudios.com/sandbox/
Интересно, как я могу заставить фоновые изображения моего сайта не вызывать полосу прокрутки из-за их ширины/расположения.
Если вы проверите ссылку, вы увидите, что желтые полосы вверху не вызывают прокрутку, а белые внизу вызывают, если размер окна меньше его ширины.
По сути, я хочу, чтобы горизонтальная полоса прокрутки появлялась только тогда, когда окно меньше по ширине, чем 960 сетка. Все остальные графические дополнения слева или справа не должны вызывать прокрутку. Есть ли способ добиться этого, если не считать гигантского неэффективного фонового изображения?
- css
- scroll
Что вам нужно сделать, это сделать фоновые изображения на самом деле фоновыми изображениями, тогда это будет работать.
Итак, сначала вам нужно добавить несколько элементов для фоновых изображений, например:
<дел>