2010-09-27 9 views
5

Ich versuche, das Scroll-Ereignis in Android-Browser zu erkennen (meine spezifische Version ist 2.1, aber ich will es auch auf älteren Versionen arbeiten). Das scheint unmöglich!Detect Scroll-Ereignis auf Android-Browser

Ich versuchte zunächst, dies:

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

Aber nichts wird ausgelöst (außer, wenn die Seite zu laden).

Ich dachte: na ja, lassen Sie uns verrückt sein und emulieren es von: 1. Detecting touchEnd 2. Polling die window.pageYOffset so dass wir wissen, wenn das Fenster Scrollen stoppt 3. manuell eine Benutzerfunktion auslösen ich blättern wollen .

Leider scheint das touchend-Ereignis auch nicht ausgelöst zu werden ... in der Tat, wenn wir nicht scrollen und nur den Bildschirm antippen (Touchstart + Touchend), funktioniert es. Sobald wir die Seite dazwischen scrollen (Touchstart + TouchMove + Touchend), bricht alles zusammen.

Nun meine grundlegendste Beispiel enthält nur dieses:

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

Aber die Warnung nicht zu sehen, wenn wir mit dem Finger bewegen und lassen Sie die Touch ...

Hat hat jemand einen Vorschlag ?

Danke.

Antwort

2

Möglicherweise möchten Sie die Quelle für JQuery Mobile crawlen, es unterstützt Android-Browser und Scroll-Event-Listener.

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); 
      }); 
     } 
};