Прокрутка по умолчанию не может быть предотвращена на событии 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});
Другие вопросы по тегам