2010-09-27 19 views
5

Estoy tratando de detectar el evento de desplazamiento en el navegador de Android (mi versión específica es 2.1, pero quiero que también funcione en versiones anteriores). ¡Esto parece imposible!Detectar evento de desplazamiento en el navegador de Android

intentó por primera vez este:

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

Pero nada se activa (excepto cuando la carga de la página).

pensé: bueno, vamos a ser loco y emularlo por: 1. Detección touchEnd 2. Sondeo del window.pageYOffset para asegurarse de que cuando la ventana deja de moverse 3. activar manualmente una función de usuario que quiero en rollo .

Desafortunadamente, el evento touchend tampoco parece activarse ... de hecho, cuando no nos desplazamos y tocamos la pantalla (touchstart + touchend), funciona. Tan pronto como desplazamos la página en el medio (touchstart + touchmove + touchend), rompe todo.

Ahora mi ejemplo más básico contiene solamente esto:

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

Pero la alerta no se presenta cuando nos desplazamos con el dedo y suelte el tacto ...

¿Tiene

alguien tiene una sugerencia ?

Gracias.

Respuesta

2

Es posible que desee rastrear la fuente de JQuery Mobile, es compatible con los navegadores android y tiene oyentes de eventos de desplazamiento.

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