使用jQuery在Android上确定长按(长按,轻按)

我已经能够使用jQuery和HTML页面成功地在Android上使用touchstart,touchmove和touchend事件。 现在我试图看看什么技巧是确定一个长按事件,其中一个水龙头,并持有3秒。 我似乎还没有弄清楚。 我想纯粹在没有Sencha Touch,JQTouch,jQMobile等jQuery中。

我喜欢jQTouch的概念,尽pipe它并没有给我提供很多东西,我的一些代码也随之破坏了。 使用Sencha Touch,我不是一个从jQuery转移到Ext.js和一些做Javascript抽象的新方法的粉丝,特别是当jQuery的能力如此强大的时候。 所以,我想单独用jQuery来解决这个问题。 我已经能够使用jQuery自己做很多jQTouch和Sencha Touch的东西了。 而且jQMobile仍然是testing版,而且还没有足够的针对Android。

Solutions Collecting From Web of "使用jQuery在Android上确定长按(长按,轻按)"

不使用定时器,但只有在长时间点击后用户松开手指后才会触发定时器。

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

为什么不使用js计时器? 我做了这样的事情:

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

到目前为止,我一直没有遇到任何麻烦……不过,我还没有做过非常多的设备testing,但是在我的桌面上(使用mousedown / mouseup)以及HTC Droid Eris(Android 1.6)和我的Droid RAZR(Android 2.3)…

我做了这样的事情:

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

虽然它不是jQuery,但我已经在我的Android应用程序中这样做了:

  1. 注册事件监听器:

     var touchStartTimeStamp = 0; var touchEndTimeStamp = 0; window.addEventListener('touchstart', onTouchStart,false); window.addEventListener('touchend', onTouchEnd,false); 
  2. 附加function:

     var timer; function onTouchStart(e) { touchStartTimeStamp = e.timeStamp; } function onTouchEnd(e) { touchEndTimeStamp = e.timeStamp; console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds } 
  3. 检查时差,做了我的东西

我希望这将有所帮助。