2012-02-12 81 views
0

我试图捕捉时间的触摸的触摸持续时间开始和结束之间经过,并不能似乎得到一致的行为,不管我怎么努力。捕捉iPad上

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

我必须提醒到位多空触摸,但似乎只是在结果没有一致性。

我确实看到了类似的问题已经在这里问过“得到最久期,一个触摸式的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的一个小剪断我使用测试。(不得不删除一个的HREFs如计算器从他们提交的问题有阻止我。)

  • 测试
  • 测试
  • 测试

回答

0

您不必捕获touchmove事件。正因为如此endOfTouch方法被称为上touchmove事件之前甚至touchend发生。

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

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

感谢您的快速回答,但实际上在我开始体验这个问题后,我实际上已经将这件事告诉了他们。没有它也存在问题。 – Joe 2012-02-12 04:29:50