Событие onscroll не вызывается на iPad после панорамирования одним касанием? - PullRequest
6 голосов
/ 10 июля 2010

Пытаясь выяснить положение прокрутки для UIWebView, я присоединяю слушателя в HTML, который будет вызывать обратный вызов основного приложения. Я присоединяю слушателя JavaScript как:

window.onscroll = function reportScroll() {
    var sY = window.pageYOffset;
    alert('Scroll pos: '+sY);  // Would evetually trigger a URL or something
}

Это событие вызывается только в конце прокрутки прокрутки на OS 3.2 (iPad), когда торможение закончилось. Однако это: https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW7, по-видимому, указывает на то, что оно должно срабатывать также и в конце сковороды с одним пальцем. Мне действительно нужно знать, когда эта кастрюля завершится.

Ответы [ 3 ]

3 голосов
/ 10 июля 2010

Согласно QuirksMode Safari iPhone не запускает событие onscroll на window, а на document (и любом другом элементе).Могу поспорить, что Safari iPad делает то же самое.

1 голос
/ 24 января 2011

Я также столкнулся с той же проблемой в iPhone: прокрутка с помощью прокрутки корректно генерирует событие onscroll, но панорамирование одним пальцем - нет (я использовал это в своей фиксированной реализации меню, где меню скрывается после события ontouchstart и восстанавливается после OnScroll).

Я решил проблему, используя два параллельных события: onscroll и ontouchend. Теперь они оба ссылаются на один и тот же обработчик событий (который восстанавливает меню). Поскольку во время прокрутки события подавляются, событие ontouchend не запускается, если окно продолжает прокручивание с прокруткой. Теперь обработка событий работает как для прокрутки, так и для панорамирования.

Я не проверял это на iPad, мне было бы интересно узнать, поможет ли это исправление и в этом.

0 голосов
/ 27 июля 2012

В iOS Safari событие onscroll должно запускаться только один раз в конце прокрутки (после замедления).Если вы просто убираете палец с экрана, воспринимайте это как мгновенное замедление.Поэтому, если вы выполняете «прокрутку пролистывания», событие onscroll все еще срабатывает только один раз, в самом конце замедления.

Похоже, вам также следует отслеживать событие касания:

$(window).on('touchend', function() {
     // Do something
});

Примечание. Событие касания запускается для каждого пальца, поднятого с экрана.

...