Кажется, я не могу зафиксировать событие прокрутки на iPad. Ничего из этого не работает, что я делаю не так?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Все они работают даже в Safari 3 в Windows. По иронии судьбы, КАЖДЫЙ браузер на ПК поддерживает, window.onload=
если вы не возражаете против уничтожения существующих событий. Но на iPad нет.
window.pageYOffset
и неdocument.body.scrollTop||document.documentElement.scrollTop
как и любой другой браузер / аппаратных средств в существовании.window.pageYOffset
не обновляется в фазе замедления, а только после завершения прокрутки.Для iOS вам нужно использовать событие touchmove, а также событие прокрутки, например:
источник
Извините за добавление другого ответа к старому сообщению, но я обычно очень хорошо получаю событие прокрутки, используя этот код (он работает, по крайней мере, на 6.1)
И это работает для меня. Единственное, чего он не делает, это дает событие прокрутки для замедления прокрутки (после завершения замедления вы получаете последнее событие прокрутки, сделайте с ним то же, что и вы.), Но если вы отключите инерцию с помощью css, сделав это
Вы не получаете инерции в ваших элементах, для тела, хотя вам, возможно, придется делать классический
источник
gesturechange
события нестандартны и поддерживаются только Safari: developer.mozilla.org/en-US/docs/Web/Events/gesturechangeЯ смог получить отличное решение этой проблемы с помощью iScroll, с ощущением динамической прокрутки и всем остальным https://github.com/cubiq/iscroll Документ github великолепен, и я в основном следил за ним. Вот подробности моей реализации.
HTML: я обернул прокручиваемую область моего контента в некоторые div, которые может использовать iScroll:
CSS: я использовал класс Modernizr для «прикосновения», чтобы нацелить изменения моего стиля только на сенсорные устройства (потому что я создавал экземпляр iScroll только при касании).
JS: Я включил iscroll-probe.js из загрузки iScroll, а затем инициализировал скроллер, как показано ниже, где updatePosition - моя функция, которая реагирует на новую позицию прокрутки.
Теперь вам нужно использовать myScroller, чтобы получить текущую позицию, вместо того, чтобы смотреть на смещение прокрутки. Вот функция, взятая из http://markdalgleish.com/presentations/embracingtouch/ (очень полезная статья, но сейчас она немного устарела)
Единственная другая проблема заключалась в том, что иногда я терял часть своей страницы, на которую я пытался прокрутить, и она отказывалось прокручиваться. Мне приходилось добавлять несколько вызовов myScroller.refresh () всякий раз, когда я менял содержимое #wrapper, и это решало проблему.
РЕДАКТИРОВАТЬ: Еще одна проблема заключалась в том, что iScroll съедает все события щелчка. Я включил опцию, чтобы iScroll генерировал событие «касание» и обрабатывал его вместо событий «щелчок». К счастью, мне не нужно было много щелкать в области прокрутки, так что это не имело большого значения.
источник
С выходом iOS 8 этой проблемы больше не существует. Событие прокрутки теперь плавно запускается и в iOS Safari.
Итак, если вы зарегистрируете
scroll
обработчик событий и заглянитеwindow.pageYOffset
внутрь этого обработчика событий, все будет работать нормально.источник