使用jQuery在Android上确定长按(长按,点按保持)

时间:2011-01-17 04:51:23

标签: jquery android tapandhold

我已经能够使用jQuery和HTML页面在Android上使用touchstart,touchmove和touchend事件successfully play。现在我想看看诀窍是什么,以确定一个长敲击事件,其中一个点击并保持3秒。我似乎无法解决这个问题。我想要没有Sencha Touch,JQTouch,jQMobile等纯粹的jQuery。

我喜欢jQTouch的概念,虽然它并没有为我提供很多东西,而且我的一些代码也破坏了它。使用Sencha Touch,我不喜欢将jQuery转移到Ext.js以及一些新的Javascript抽象方式,尤其是当jQuery非常强大时。所以,我想单独使用jQuery来解决这个问题。我已经能够使用jQuery自己做很多jQTouch和Sencha Touch的事情了。并且jQMobile仍处于测试阶段,尚未足够指向Android。

5 个答案:

答案 0 :(得分:11)

定时器未使用但只会在用户松开长按后释放手指。

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

答案 1 :(得分: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);

答案 2 :(得分:0)

为什么不使用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);
});

到目前为止,我已经完全没有遇到任何麻烦......不可否认,我没有进行过令人难以置信的广泛设备测试,但它在我的桌面上工作(使用mousedown / mouseup)以及HTC Droid Eris( Android 1.6)和我的Droid RAZR(Android 2.3)......

答案 3 :(得分:0)

我做了类似的事情:

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

答案 4 :(得分:0)

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

  1. 注册事件监听器:

    var touchStartTimeStamp = 0;
    var touchEndTimeStamp   = 0;
    
    window.addEventListener('touchstart', onTouchStart,false);
    window.addEventListener('touchend', onTouchEnd,false);
    
  2. 添加了功能:

    var timer;
    function onTouchStart(e) {
        touchStartTimeStamp = e.timeStamp;
    }
    
    function onTouchEnd(e) {
        touchEndTimeStamp = e.timeStamp;
    
        console.log(touchEndTimeStamp - touchStartTimeStamp);// in miliseconds
    }
    
  3. 检查了时差并完成了我的工作

  4. 我希望这会有所帮助。