2012-02-12 111 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