2011-01-17 6 views
8

He podido successfully play con los eventos touchstart, touchmove y touchend en Android usando jQuery y una página HTML. Ahora estoy tratando de ver cuál es el truco para determinar un evento de tap largo, donde uno toca y retiene durante 3 segundos. Parece que todavía no puedo resolver esto. Estoy queriendo esto puramente en jQuery sin Sencha Touch, JQTouch, jQMobile, etc.Determinación del toque largo (Pulsación larga, Mantener pulsación) en Android con jQuery

Me gusta el concepto de jQTouch, aunque no me proporciona mucho y parte de mi código se rompe. Con Sencha Touch, no soy partidario de pasar de jQuery a Ext.js y una nueva forma de abstracción de Javascript, especialmente cuando jQuery es tan capaz. Entonces, quiero resolver esto solo con jQuery. He podido hacer muchas cosas de jQTouch y Sencha Touch por mi cuenta usando jQuery. Y jQMobile todavía está demasiado beta y no está lo suficientemente dirigido para Android todavía.

Respuesta

11

Los temporizadores no se utilizan, pero solo se dispararán después de que el usuario suelta el dedo después de un largo toque.

var startTime, endTime; 
var gbMove = false; 

window.addEventListener('touchstart',function(event) { 
    startTime = new Date().getTime(); 
    gbMove = false;   
},false); 

window.addEventListener('touchmove',function(event) { 
    gbMove = true; 
},false); 

window.addEventListener('touchend',function(event) { 
    endTime = new Date().getTime(); 
    if(!gbMove && (endTime-startTime)/1000 > 2) 
     alert('tap hold event');  
},false); 
7
var gnStartTime = 0; 
var gbMove = false; 
var gbStillTouching = false; 

function checkTapHold(nID) { 
    if ((!gbMove) && (gbStillTouching) && (gnStartTime == nID)) { 
    gnStartTime = 0; 
    gbMove = false; 
    alert('tap hold event');  
    } 
} 

window.addEventListener('touchstart',function(event) { 
    gbMove = false; 
    gbStillTouching = true; 
    gnStartTime = Number(new Date()); 
    setTimeout('checkTapHold(' + gnStartTime + ');',2000); 
},false); 

window.addEventListener('touchmove',function(event) { 
    gbMove = true; 
},false); 

window.addEventListener('touchend',function(event) { 
    gbStillTouching = false; 
},false); 
0

¿Por qué no utilizar un temporizador js? Hice algo como:

i=0; 
$drink = document.getElementById('drink'); 
$drink.addEventListener('touchstart',function(event){ 
    $('#drink .mainBtnText').text('HOLD'); //mostly for debugging 
    t = window.setInterval(function(event){ 
      i+=.5; 
      if (i>=1){ 
       alert('taphold'); 
       window.clearInterval(t); 
       i=0; 
      } 
     },500); 
}); 
$drink.addEventListener('touchend',function(event){ 
    $('#drink .mainBtnText').text('Drink'); 
    i=0; 
    window.clearInterval(t); 
}); 

Y he tenido absolutamente ningún problema con él hasta el momento ... es cierto, no he hecho muy extensas pruebas dispositivo, pero ha trabajado en mi escritorio (con mousedown/mouseup), así como un HTC Droid Eris (Android 1.6) y mi RAZR Droid (Android 2.3) ...

+0

Se comporta de forma adecuada con respecto al toque/inicio o final en diferentes lugares, por extraño que parezca. No estoy seguro de por qué está haciendo eso, pero tampoco me estoy quejando: P –

0

hice algo como esto:

var touchCounter; 

window.addEventListener('touchstart', function() { 
    var count = 0; 
    touchCounter = setInterval(function() { 
    count++; 
    if (count == 10) alert('touch lasted 10 seconds'); 
    }, 1000); 
}); 

window.addEventListener('touchend', function() { 
    clearInterval(touchCounter); 
    touchCounter = null; 
}); 
0

Aunque no es jQuery pero he hecho de esta manera en mi aplicación de Android:

  1. eventos registrados oyentes:

    var touchStartTimeStamp = 0; 
    var touchEndTimeStamp = 0; 
    
    window.addEventListener('touchstart', onTouchStart,false); 
    window.addEventListener('touchend', onTouchEnd,false); 
    
  2. funciones añadidas:

    var timer; 
    function onTouchStart(e) { 
        touchStartTimeStamp = e.timeStamp; 
    } 
    
    function onTouchEnd(e) { 
        touchEndTimeStamp = e.timeStamp; 
    
        console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds 
    } 
    
  3. comprueban diferencia de tiempo e hicieron mis cosas

espero que esto ayudará.

Cuestiones relacionadas