2010-07-21 12 views
7

Sto provando a rilevare quando un utente ha terminato lo scorrimento di una pagina Web utilizzando javascript su Android. La sceneggiatura che ho sta lavorando su iPhone e mi sembra corretto che dovrebbe funzionare su Android. In ogni caso, un frammento:Rileva se sta scorrendo una pagina Web su Android

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

L'idea di base, il polling il pageYOffset ogni 200ms, se non ci fosse stato alcun cambiamento, allora non c'è scorrimento accadendo. Altrimenti, continua a cercare.

Come ho detto, questo funziona su iPhone, quindi presumo che sia qualcosa che ha a che fare con Android, forse non aggiornando la pagina YOffset durante una scroll?

Qualsiasi aiuto è molto apprezzato!

Nota: ho scelto questa route perché non riuscivo a trovare una proprietà isScrolling o scrollStop. Se ho trascurato uno, per favore mi dica :)

Grazie


aggiornamento: solo cercato di utilizzare il 'scorrere' evento per rilevare questo. Risultati misti qui. Sull'emulatore Android era funzionante quasi correttamente, ma era molto intermittente su un telefono reale (2.1 Sense Hero GSM), cioè solo 1 su 10 rotoli sono stati rilevati.

Anche quando è stato 'lavorando' sul emulatore non è stato generare l'evento di scorrimento quando si scorre 'up' quando si sono in cima alla pagina (cioè spingere verso l'alto per vedere la barra degli indirizzi). Questo è un problema dato che la pagina è stata effettivamente spostata (posizione modificata) ma I non riceve l'evento.

nota, l'iPhone sembra al fuoco e rilevare l'evento in modo corretto (almeno nell'emulatore, non ha accesso a dispositivi al momento).

Qualche idea ragazzi?


Update 2: Il nuovo 'scorrere' evento sembra al lavoro (nella stessa misura come il emulatore (1.6 e 2.1)) su alcuni dispositivi Android. Continuerà a investigare per cercare di restringere questo verso il basso.

ancora il problema di 'scorrere' non essere sparato quando si scorre fino al bar indirizzo. Potrebbe essere necessario un po 'di tipo di soluzione ibrida di' scroll ' rilevamento eventi e polling movimento dopo un tocco.

risposta

1

L'eroe si interpone utilmente in occasione di eventi occasionali e non li segnala correttamente in javascript. Ne abbiamo scoperti alcuni nel nostro sviluppo Android. A volte sembra avere importanza in quale direzione si sta tenendo il telefono (non scherzo!)

+0

Accettando questo come tendo ad essere d'accordo. –

0

Forse potresti usare onScrollListener?

how to detect Android ListView Scrolling stopped?

Questo ragazzo sta cercando di rilevare un arresto, ma io sono sicuro che funziona per lo scorrimento pure.

+0

Ecco la documentazione Android per lo http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html – Cameron

+0

Penso che potrebbe non rientrare nell'ambito della domanda, il tentativo di ottenere se la pagina sta scorrendo è da javascript. A meno che l'OP non stia ospitando il 'WebView' in un'applicazione, potrebbero non avere gli hook appropriati. –

+0

Ho dato un'occhiata, Quintin ha ragione, sono solo sul web, non su un'app. Questo mi ha fatto pensare a provare ad usare l'evento 'scroll', però, aggiorna pubblicato sopra. –

1

L'assistenza Using window.onscroll event to detect page/frame scrolling risponde alla tua domanda? Quel poster ha utilizzato l'evento window.onscroll per rilevare lo scorrimento, quindi forse è possibile salvare la posizione corrente e attivare una chiamata setTimeout nel gestore eventi. Se quando si verifica la chiamata, ci si trova nella stessa posizione, quindi lo scorrimento si interrompe.

+0

Per quanto ne so, questo è uguale all'evento di scorrimento che ho seguito con addEventListener. Ottenere l'inizio della pergamena non è un problema (anzi, sto iniziando la mia sceneggiatura ad ogni tocco dello schermo), lo sto scoprendo quando il rotolo è finito. Sembra che l'iPhone scocchi l'evento di scorrimento alla fine della pergamena (perfetto), gli emulatori Android e alcuni telefoni lo spari più volte durante lo scorrimento (perfetto) anche se ho trovato un paio che lo spara solo una volta all'inizio (cattivo) . La mia soluzione attuale è il polling della pagina per determinare quando ha smesso di muoversi. Grazie –

Problemi correlati