Прокрутка по умолчанию не может быть предотвращена на событии touchmove на iOS10
В Safari 10 путем определения простого слушателя, который предотвращает touchmove
событие внутри прокручиваемого элемента, событие по умолчанию не предотвращается, как это происходит в Safari 9 и менее (это также происходит во всех основных браузерах).
Это воспроизводимо здесь: http://codepen.io/anon/pen/PGRxOv
Действия по воспроизведению:
- Возьмите элемент с прокручиваемым содержимым (overflow: scroll).
- Добавьте слушатель события для этого
touchmouve
событие и звонокevent.preventDefault()
в этом случае слушатель.
Ожидаемые результаты:
Элемент не должен быть прокручиваемым.
Фактические результаты:
Элемент все еще можно прокручивать в Safari 10.
Версия: iOS 10.0.2
Вероятно, проблема с веб-набором... Я открыл проблему с трекером ошибок в веб-наборе.
В то же время, если у кого-то есть обходной путь (кроме предотвращения touchstart
), было бы здорово:)
Я также пытался return false
в слушателе, но это не работает.
2 ответа
Спасибо, что написали об этом и подняли вопрос - это меня совершенно сбило с толку!
Похоже, ваше решение для кодепа не сработало, но с тех пор я нашел другое решение здесь: https://github.com/metafizzy/flickity/issues/457
Это их решение:
window.addEventListener( 'touchmove', function() {})
Чувствует себя очень взволнованным, но сработало для моей ситуации.
Я надеюсь, что это помогает кому-то еще разочарован этим.
Вам необходимо пройти
{passive:false}
возможность
addEventListener
(объяснение ), и вам также нужно убедиться, что вы выполняете
e.preventDefault()
на
touchmove
а также
touchstart
:
window.addEventListener("touchstart", e=>e.preventDefault(), {passive:false});
window.addEventListener("touchmove", e=>e.preventDefault(), {passive:false});