2010-07-21 4 views
7

J'essaie de détecter quand un utilisateur a fini de faire défiler une page Web en utilisant javascript sur Android. Le script que j'ai travaille sur iPhone et me semble correct pour Android. Quoi qu'il en soit, un extrait:Détecter si en cours de défilement une page Web sur Android

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

L'idée de base, selon un sondage du pageYOffset tous les 200ms, s'il n'y avait pas eu de changement alors il n'y a pas de défilement qui se passe. Sinon, continuez à chercher. Comme je l'ai dit, cela fonctionne sur iPhone, donc je suppose que c'est quelque chose à voir avec Android, peut-être pas mettre à jour pageYOffset lors d'un défilement?

Toute aide est grandement appréciée!

Remarque: J'ai opté pour cette route car je n'ai pas trouvé de propriété isScrolling ou d'événement de type scrollStop. Si j'ai oublié un, s'il vous plaît dites-moi :)

Merci


Mise à jour: pour détecter ce juste essayé d'utiliser le « défilement » événement . Résultats mitigés ici. Sur l'émulateur Android, il était fonctionnant presque correctement, mais était très intermittent sur un téléphone réel (2.1 Sense Hero GSM), c'est-à-dire que seulement 1 sur 10 défilements ont été détectés.

Même quand il était « travaille » sur l'émulateur il n'a pas été mise à feu de l'événement défilement lorsque vous faites défiler « up » lorsque vous sont en haut de la page (c.-à- push up pour voir la barre d'adresse). Ce est un problème que la page a effectivement fait défiler(position changée) mais je ne reçois pas l'événement.

Remarque, l'iPhone ne semble tirer et détecter correctement l'événement (au moins dans l'émulateur, pas d'accès au moment à l'appareil ).

Des idées les gars?


Mise à jour 2: Le nouvel événement scroll '' semble au travail (dans la même mesure que l'émulateur (1.6 et 2.1)) sur certains appareils Android. Va continuer à enquêter pour essayer de réduire ce vers le bas.

Toujours le problème de 'défilement' n'étant pas déclenché lorsque vous faites défiler jusqu'à la barre d'adresse . Peut-être avoir un certain type de solution hybride de «défilement» de détection d'événement et de mouvement d'interrogation après un contact.

Répondre

1

Le héros s'interpose de manière utile lors d'événements occasionnels et ne les signale pas correctement en javascript. Nous en avons découvert un certain nombre dans notre développement Android. Parfois, il semble à la matière quelle façon vous tenez le téléphone (ne plaisante pas!)

+0

Je vais accepter cela car j'ai tendance à être d'accord. –

0

Peut-être pourriez-vous utiliser onScrollListener?

how to detect Android ListView Scrolling stopped?

Ce mec essaie de détecter un arrêt, mais je suis sûr que cela fonctionne pour le défilement aussi bien.

+0

Voici les docs android pour elle http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html – Cameron

+0

Je pense que cela pourrait tomber en dehors de la portée de la question, la tentative d'obtenir si la page défile est de javascript. À moins que l'OP n'héberge le 'WebView' dans une application, il se peut qu'ils n'aient pas les bons hooks. –

+0

J'ai jeté un coup d'oeil, Quintin a raison, je suis seulement dans le web, pas une application. Cela m'a fait penser à essayer d'utiliser l'événement 'scroll', mise à jour publiée ci-dessus. –

1

Est-ce que Using window.onscroll event to detect page/frame scrolling aide à répondre à votre question? Cette affiche utilisait l'événement window.onscroll pour détecter le défilement, donc peut-être pouvez-vous enregistrer la position actuelle et déclencher un appel setTimeout dans le gestionnaire d'événements. Si le rappel se produit, vous êtes à la même position, alors le défilement aurait été arrêté.

+0

Pour autant que je sache, c'est la même chose que l'événement de défilement que j'ai suivi grâce à addEventListener. Obtenir le début du défilement n'est pas un problème (en fait, je commence mon script à chaque fois que j'appuie sur l'écran), c'est découvrir quand le parchemin est terminé. Il semble que l'iPhone déclenche l'événement de défilement à la fin du défilement (parfait), les émulateurs Android et certains téléphones le tirent plusieurs fois en défilant (parfait) bien que j'ai trouvé un couple qui ne le déclenche qu'une fois au début . Ma solution actuelle consiste à interroger la page pour déterminer quand elle a cessé de bouger. Merci –

Questions connexes