8

我已经能够使用 jQuery 和 HTML 页面在 Android 上成功使用 touchstart、touchmove 和 touchend 事件。现在我想看看确定一个长按事件的诀窍是什么,一个人轻按并保持 3 秒。我似乎还无法弄清楚这一点。我想要这个纯粹在没有 Sencha Touch、JQTouch、jQMobile 等的 jQuery 中。

我喜欢 jQTouch 的概念,尽管它并没有为我提供很多东西,而且我的一些代码与它不符。使用 Sencha Touch,我不喜欢从 jQuery 迁移到 Ext.js 和一些新的 Javascript 抽象方法,尤其是当 jQuery 如此强大时。所以,我想单独用 jQuery 来解决这个问题。我已经能够使用 jQuery 自己做很多 jQTouch 和 Sencha Touch 的事情了。而 jQMobile 仍然是太测试版,还没有足够定向到 Android。

4

5 回答 5

12

计时器未使用,但只有在用户长按后松开手指后才会触发。

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);
于 2012-03-31T14:34:50.277 回答
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);
于 2011-01-17T07:12:37.857 回答
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)...

于 2012-05-26T05:15:38.507 回答
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;
});
于 2015-10-20T14:02:04.833 回答
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. 检查时差并做了我的事情

我希望这将有所帮助。

于 2017-01-03T12:37:59.830 回答