2010-07-21 13 views
7

Próbuję wykryć, kiedy użytkownik zakończył przewijanie strony internetowej przy użyciu javascript na Androida. Skrypt, który mam działa na iPhone'a i wydaje mi się poprawny, że powinien działać na Androidzie. W każdym razie, to fragment:Wykrywanie, czy obecnie przewijanie strony internetowej w systemie Android

previous = pageYOffset; 
interval = setInterval(function() { 
    //Has scrolling stopped? 
    if(previous == pageYOffset) { 
     clearInterval(interval); 
     //DO SOMETHING AFTER SCROLL COMPLETE 
    } else { 
     previous = pageYOffset; 
    } 
}, 200); 

Podstawową ideą, sondowania pageYOffset co 200ms, czy nie doszło do zmiany, to nie ma przewijanie dzieje. W przeciwnym razie szukaj dalej.

Jak już powiedziałem, działa to na iPhonie, więc zakładam, że jest to coś wspólnego z Androidem, który prawdopodobnie nie aktualizuje pageYOffset podczas przewijania?

Każda pomoc jest bardzo doceniana!

Uwaga: wybrałem tę trasę, ponieważ nie mogłem znaleźć zdarzenia typu isScrolling lub typu scrollStop. Gdybym przeoczyli jeden, proszę mów mi :)

Dzięki


UPDATE: Właśnie próbował użyć 'przewijać' zdarzenie to wykryć. Wyniki mieszane tutaj. Na emulatorze Androida działało prawie poprawnie, ale było bardzo niestabilne w stosunku do rzeczywistego telefonu (2.1 Sense Hero GSM), tzn. Wykryto tylko 1 na 10 zwojów.

Nawet gdy było „pracy” na emulatorze nie strzelał zdarzenie przewijania podczas przewijania „w górę”, kiedy są na górze strony (tj push up, aby zobaczyć pasek adresu). Ten jest problemem, ponieważ strona została przewinięta (zmieniona pozycja), ale I nie odbieram zdarzenia.

Uwaga, iPhone wydaje się ognia i wykryć zdarzenie poprawnie (przynajmniej w emulatorze, nie ma dostępu do urządzenia w tej chwili).

Jakieś pomysły?


Aktualizacja 2: Nowy 'przewijać' zdarzenie wydaje do pracy (w takim samym stopniu jak emulator (1.6 i 2.1)) Na niektórych urządzeń z systemem Android. W dalszym ciągu będziemy badać , próbując zawęzić to .

Nadal problem "przewijania" nie jest wystrzeliwany po przewinięciu paska adresu do . Może zaistnieć potrzeba pewnego rodzaju hybrydowego rozwiązania "przewijania" wykrywania zdarzeń i przepytywania ruchu po dotknięciu.

Odpowiedz

1

Hero pomocnie udostępnia się w sporadycznych zdarzeniach i nie zgłasza ich poprawnie do javascript. Odkryliśmy wiele z nich w naszym rozwoju Androida. Czasami wydaje się do znaczenia, w jaki sposób jesteś trzymając telefon (nie żartuję!)

+0

Przyjmę to, ponieważ zgadzam się. –

0

Może mógłbyś użyć onScrollListener?

how to detect Android ListView Scrolling stopped?

Ten facet próbuje wykryć stop, ale jestem pewien, że to działa na przewijanie, jak również.

+0

Oto android docs bo http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html – Cameron

+0

Myślę, że może to wykraczać poza zakres pytania, próba uzyskania tego, czy strona jest przewijana, pochodzi z javascript. O ile OP nie hostuje 'WebView' w aplikacji, mogą nie mieć odpowiednich haczyków. –

+0

Spojrzałem, Quintin ma rację, jestem tylko w sieci, a nie aplikacji. To spowodowało, że pomyślałem o próbie skorzystania ze zdarzenia "przewiń", jednak aktualizacja została opublikowana powyżej. –

1

Czy Using window.onscroll event to detect page/frame scrolling pomaga w udzieleniu odpowiedzi na pytanie? Ten plakat wykorzystał zdarzenie window.onscroll do wykrycia przewijania, więc być może możesz zapisać bieżącą pozycję i wystrzelić wywołanie setTimeout w procedurze obsługi zdarzeń. Jeśli po oddzwonieniu dojdziesz do tej samej pozycji, przewijanie zatrzymałoby się.

+0

O ile mi wiadomo, jest to to samo co zdarzenie przewijania, które śledziłem przez addEventListener. Rozpoczęcie przewijania nie jest problemem (w rzeczywistości rozpoczynam mój skrypt po każdym dotknięciu ekranu), jest to ustalenie, kiedy zakończy się przewijanie. Wygląda na to, że iPhone uruchamia przewijanie na końcu przewijania (idealne), emulatory Androida i niektóre telefony uruchamiają je wielokrotnie podczas przewijania (idealne), chociaż znalazłem parę, która wystrzeliła tylko raz na starcie (zła) . Moje bieżące rozwiązanie polega na odpytywaniu strony w celu ustalenia, kiedy przestało się to odbywać. Dzięki –

Powiązane problemy