在ipad上捕捉触摸的持续时间

时间:2012-02-12 04:22:40

标签: jquery ios touch

我试图捕捉触摸开始和结束之间经过的持续时间,并且无论我尝试什么,似乎无法获得一致的行为。

我尝试了一些不同的解决方案,但行为总是零星的。这是我目前正在尝试的一个例子(下图)。

我有长时间和短暂触摸的警报,但结果似乎没有一致性。

我确实在'get-the-a-touch-in-javascript'之前已经看到了类似的问题,但该解决方案会产生相同的不确定结果。

任何建议都会非常感激。

$(document).ready(function() {
    var $IndividualItem = $(".wrapperWithHover li a");
    var touchStartTime;
    var touchStartLocation;
    var touchEndTime;
    var touchEndLocation;
    $IndividualItem.bind('touchstart', startOfTouch);
    $IndividualItem.bind('touchend', endOfTouch);
    $IndividualItem.bind('touchmove', endOfTouch);


 function startOfTouch(e) {
     e.preventDefault();
     var d = new Date();
     touchStartTime = d.getTime();

}
function endOfTouch(e) {
    e.preventDefault();
     var d = new Date();
     touchEndTime= d.getTime();
     doTouchLogic();
}

function doTouchLogic() {
     var duration = touchEndTime - touchStartTime;
     if (duration <= 1500) {
         alert('1');
               }
     if (duration > 1500) {
          alert('2');
     }       
    duration = null;

}






$('.wrapperWithHover li a').each(function() {

   var timeout,
       longtouch;

   $(this).bind('touchstart', function() {
      timeout = setTimeout(function() {
          longtouch = true;
      }, 1000);
   }).bind('touchend', function() {
       if (longtouch) {
          // It was a long touch.
       }
       longtouch = false;
       clearTimeout(timeout);
   });

});

});

这里有一小段html用于测试。(由于stackoverflow阻止我在那里提交问题,我不得不删除一个hrefs。)

     
          
  • 测试
  •       
  • 测试
  • 测试
  

1 个答案:

答案 0 :(得分:0)

您不必捕获touchmove事件。因为在endOfTouch发生之前,touchmove事件会调用touchend方法。

从代码中删除此行并尝试。它应该给你正确的结果。

$IndividualItem.bind('touchmove', endOfTouch);