2010-07-09 13 views
5

Próbując ustalić pozycję przewijania w interfejsie użytkownika UIWebView, dołączam w kodzie HTML detektor, który oddzwoni do głównej aplikacji. Załączam javascript słuchacza, takich jak:Zdarzenie onscroll nie jest wyzwalane na iPadzie po przesunięciu jednym dotknięciem przycisku?

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

To zdarzenie tylko wydaje się być wyzwalane na koniec zwoju flick na OS 3.2 (iPad), po zakończeniu hamowania. Jednak: http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html#//apple_ref/doc/uid/TP40006511-SW7 wydaje się wskazywać, że powinno być również uruchomione na końcu palca z pojedynczym palcem. Naprawdę muszę wiedzieć, kiedy ta patelnia również się dopełni. Każda pomoc doceniona, dzięki.

+0

czy to rozwiązało problem? – galambalazs

+0

Nie, przepraszam, jeśli mój komentarz poniżej nie był jasny - nie miało to żadnego wpływu. –

Odpowiedz

3

Według QuirksMode Safari iPhone nie ognia onscroll zdarzenie na window, ale raczej na document (i każdy inny element). Założę się, że Safari iPad robi to samo.

+0

Próbowałem dołączyć funkcję do document.onscroll i wydaje się, że ma ten sam wynik: wyzwala zdarzenie po zakończeniu zwalniania przewijania, ale nie ma zdarzenia po przesunięciu palca jednym palcem. Dzięki za sugestię. –

1

Doświadczyłem tego samego problemu również w iPhonie: flick scroll poprawnie tworzy zdarzenie onscroll, ale przesuwanie jednym palcem nie działa (korzystałem z tego w mojej wersji menu, gdzie menu jest ukryte po zdarzeniu ontouchstart i przywrócone po przewinięciu).

Rozwiązałem problem za pomocą dwóch równoległych zdarzeń: onscroll i ontouchend. Oba odnoszą się teraz do tej samej procedury obsługi zdarzeń (która przywraca menu). Ponieważ zdarzenia są pomijane podczas przewijania, zdarzenie ontouchend nie zostaje wywołane, jeśli okno kontynuuje przewijanie. Teraz obsługa zdarzeń działa zarówno przy przewijaniu, jak i przesuwaniu.

Nie testowałem tego na iPadzie, chciałbym wiedzieć, czy ta poprawka również pomaga w tym.

0

W Safari iOS zdarzenie onscroll powinno być uruchamiane tylko jeden raz na końcu przewijania (po zwalnianiu). Jeśli po prostu zdejmujesz palec z ekranu, pomyśl o tym jako o natychmiastowym spowolnieniu. Więc jeśli wykonujesz "przewijanie", zdarzenie onscroll jest nadal uruchamiane tylko raz, na samym końcu opóźnienia.

Brzmi jak należy również monitorować zdarzenia touchend:

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

Uwaga: impreza touchend zostanie zwolniony za każdego palca, który jest podnoszony z ekranu.

Powiązane problemy