Проблема с вашим кодом document.addEventListener
.Добавление прослушивателя событий ко всему документу, как вы заметили, приведет к неприятностям.Вместо этого вы должны добавить его только к тем элементам, для которых не требуется прокрутка переполнения iOS (какое-нибудь официальное название для этого?).
Добавление -webkit-overflow-scrolling: touch;
приведет к тому, что элемент будет иметь инерционную прокрутку внутри этого элемента, но он будет работать правильно только при первой прокрутке внутри элемента.Так что, если вы нажмете верх или низ элемента с возможностью прокрутки и, например, снова прокрутите до верха, он переместит всю страницу, а не только этот элемент.Я не знаю решения, чтобы это работало должным образом.
Наилучшим решением будет добавление прослушивателя событий для всех элементов с классом no-scroll
.Вот так (используя jQuery для выбора элементов с классом для простоты):
$('.no-scroll').on('touchmove', function (event) {
event.preventDefault();
}, false);
Вы можете предотвратить эффект от второй прокрутки, поместив ее в другой прокручиваемый элемент.Поэтому вместо двойной прокрутки всей страницы будет прокручиваться родительский элемент, если это вообще возможно.