В мобильном Safari проблемы с прокруткой, как решить?

Здравствуйте, подскажите как решить проблему с прокруткой в мобильном сафари.

На странице есть слой перекрывающий страницу на весь экран со своей прокруткой, для плавности прокрутки этому слою добавляю -webkit-overflow-scrolling: auto; из-за неё возникает проблема. Когда у слоя scrollTop=0 и пытаешь скролить выше прокрутка переходи на body. хотя у body нет прокрутки. Как это запретить? Из-за этого фокус со слоя теряется и когда пытаешь скролить, контент в слое зависает, так как скролится body. Так же из-за этого возникает проблема с кнопками, приходится нажимать их два раза, первое нажатие возвращает фокус на слой.

В хроме есть overscroll-behavior: contain; который позволяет запретить скролл других слоев родителей, если скрол завершается а пользователь дальше скролит.
  • Вопрос задан
  • 8621 просмотр
Пригласить эксперта
Ответы на вопрос 3
FLUNKEY
@FLUNKEY
самовар
Можете использовать fix-scroll библиотеку для работы с нативным скроллом.
Так же прочитайте секцию Preventing, там описана проблема и решения со скроллом в iOS.
Ответ написан
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Когда показываете свой перекрывающий слой, отключайте скроллинг для боди.
Или для body, когда показываете свой перекрывающий экран, ставьте position: fixed - и скроллинга не будет)
Ответ написан
@1andres
Попробуйте библиотеку body-scroll-lock. Ко всему прочему блокирует исчезновение тулбара при скролле в Safari на iOS 15.

Прочитайте этот ишью перед использованием: https://github.com/willmcpo/body-scroll-lock/issues/236. Главное, что там сказано: то что фича со скроллом не уйдёт в Safari iOS 15, если установить библиотеку через NPM, а если качать с GitHub всё будет ОК.

Видеопример проблемы и решения:

- До использования библиотеки (боль):
https://truewebstories.ru/sites/default/files/0my_...

- После:
https://truewebstories.ru/sites/default/files/0my_...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы