JavaScript DOM изменения в touchmove отложены до конца прокрутки на мобильном Safari
в мобильном сафари, в процессе обработки touchmove
для элемента я меняю className
этого элемента. К сожалению, визуальное изменение не происходит во время прокрутки пользователя или до самого конца инерционной прокрутки.
что я могу сделать, чтобы получить className
чтобы визуально сразу?
Подробнее: по-видимому, это не ограничивается изменениями className, но, по-видимому, любые изменения в DOM, такие как innerHTML
и style
.
3 ответов
Это по дизайну, к сожалению. iOS safari будет стоять в очереди все манипуляции DOM до конца прокрутки или жеста. Эффективно DOM замораживается во время прокрутки.
Я думал, что смогу найти ссылку на это на странице разработчика apple, но я могу найти только эту ссылку на jQueryMobile:http://jquerymobile.com/test/docs/api/events.html.
обратите внимание, что устройства iOS замораживают манипуляции DOM во время прокрутки, очереди их применять, когда прокрутка завершена. В настоящее время мы расследуем способы применения манипуляций DOM до начала прокрутки
надеюсь, что это помогает!
Я фактически построил этот сайт, и да, способ обойти это ограничение-не прокручивать сайт, используя встроенные функции браузера, но подделать его. JS слушает события колесика прокрутки и клавиатуры и настраивает свойство css top основного контейнера на свой собственный "scrollTop". Полоса прокрутки справа, конечно, является пользовательской JS. В этом случае он синхронизируется с тем же внутренним значением "scrollTop".
весь сайт - это всего лишь один большой Твин, с основным временная шкала, являющаяся его положением прокрутки, и все суб-анимации запускаются в определенное время. JS не уменьшен, поэтому взгляните в ScrollAnimator.файл js, все там.
просто измените положение на -webkit-sticky
. Не устанавливайте верхнюю часть, чтобы она выглядела как обычный элемент, но выполнялась как фиксированный элемент. И вы можете обновить свой стиль, кроме позиции немедленно.