2010-09-27 6 views
5

J'essaie de détecter l'événement de défilement dans le navigateur Android (ma version spécifique est 2.1, mais je veux que cela fonctionne aussi sur les anciennes versions). Cela semble impossible!Détecter l'événement de défilement sur le navigateur Android

J'ai d'abord essayé ceci:

document.addEventListener('scroll', function(){ alert('test'); }, false); 

Mais rien ne se déclenche (sauf lorsque la charge de la page).

Je pensais: bien, soyons fou et émulent par: 1. Détection touchEnd 2. Interrogation la window.pageYOffset afin que nous sachions quand la fenêtre cesse de défiler 3. déclencher manuellement une fonction utilisateur que je veux sur rouleau .

Malheureusement, l'événement touchend ne semble pas être déclenché non plus ... en fait, lorsque nous ne faisons pas défiler et que nous tapotons seulement sur l'écran (touchstart + touchend), cela fonctionne. Dès qu'on fait défiler la page entre (touchstart + touchmove + touchend), ça casse tout.

Maintenant mon exemple le plus basique contient seulement ceci:

document.addEventListener('touchend', function(){ alert('test'); }, false); 

Mais l'alerte ne montre pas quand on fait défiler avec le doigt et relâchez la touche ...

Est-ce que quelqu'un a une suggestion ?

Merci.

Répondre

2

Vous pouvez explorer la source de JQuery Mobile, il prend en charge les navigateurs android et a des écouteurs d'événements de défilement.

Or at least they say it does in the docs. :p

Here's the source

$.event.special.scrollstart = { 
    enabled: true, 

     setup: function() { 
      var thisObject = this, 
       $this = $(thisObject), 
        scrolling, 
        timer; 

      function trigger(event, state) { 
       scrolling = state; 
       var originalType = event.type; 
       event.type = scrolling ? "scrollstart" : "scrollstop"; 
       $.event.handle.call(thisObject, event); 
       event.type = originalType; 
      } 

      // iPhone triggers scroll after a small delay; use touchmove instead 
      $this.bind(scrollEvent, function(event) { 
       if (!$.event.special.scrollstart.enabled) { 
        return; 
       } 

       if (!scrolling) { 
        trigger(event, true); 
       } 

       clearTimeout(timer); 
       timer = setTimeout(function() { 
        trigger(event, false); 
       }, 50); 
      }); 
     } 
}; 
Questions connexes