#javascript #jquery #ios
#javascript #jquery #iOS
Вопрос:
На сайте, который я создаю, возникает эффект, при котором верхняя навигация «разблокируется» из фиксированного элемента при прокрутке за определенную точку. На моем компьютере он работает очень плавно. Однако на iPad или iPhone событие прокрутки, которое выглядит следующим образом:
$(window).on('scroll', function(){...});
… если вы щелкаете для прокрутки экрана, прокрутка происходит автоматически, и событие не запускается, пока прокрутка не остановится. Если вы переместите палец для прокрутки, событие не запустится, пока вы не отпустите. Другими словами, он не запускается при перемещении (т. Е. Прокрутке) экрана.
Есть ли какой-нибудь способ, которым я могу зафиксировать как движение пальца пользователя при прокрутке экрана, так и при движении «инерции»? Если мой скрипт будет выполняться при возникновении этих событий, экран должен обновляться по ходу, и все должно происходить плавно, как на моем компьютере.
Я предполагаю, что это как-то связано с iOS. У меня нет устройства Android для тестирования… не уверен, является ли это проблемой или нет.
Был бы признателен за любые советы. Спасибо!
Ответ №1:
вместо этого вы можете попробовать использовать событие touchmove для мобильных пользователей. таким образом, код запускается, когда они двигают пальцем, а не после того, как они отпустили.
$(document).on('touchmove', function(){...});
дополнительная информация здесь: https://developer.mozilla.org/en-US/docs/Web/Events/touchmove
Комментарии:
1. Похоже, это работает. Из того, что я собираю, выполняя поиск в Интернете, вы действительно не можете обнаружить инерционную / импульсную прокрутку на iPad или iPhone? Событие запускается только после остановки прокрутки, что немного прискорбно.
Ответ №2:
Как сказал intelligentbean, вы можете использовать событие «touchmove» и прослушать его, вы также можете использовать touchstart и touchend, если хотите сделать что-то особенное до или после того, как произошло касание.
Кроме того, событие jQuery также доступно для событий касания, но это событие передается не для параметра функции прослушивателя, а для одного из его свойств:
$(document).on('touchmove',function(e){
touchEvent = e.originalEvent.touches[0]; //this is your usual jQuery event, with its properties such as pageX and pageY properties
});