2016-08-15 24 views
1

我使用Hummer.js來處理單擊和雙擊,兩個手勢都被識別爲延遲幾百毫秒。 這裏(fiddle)Hammer.js - 無延遲支持單擊和雙擊

var hammertime = new Hammer.Manager(containerElement); 
hammertime.add(new Hammer.Tap({event: 'doubletap', taps: 2})); 
hammertime.add(new Hammer.Tap({event: 'singletap'})); 
hammertime.get('singletap').requireFailure('doubletap'); 
hammertime.on("doubletap", onDoubleTap); 
hammertime.on("singletap", onSingleTap); 

證明單抽頭延遲是不可避免的,因爲它必須等待,以確保這實際上不是一個雙擊。但是雙擊延遲沒有理由。 我可以刪除requireFailure設置並處理這種我自己在這裏演示的邏輯(fiddle)

var hammertime = new Hammer.Manager(containerElement); 
hammertime.add(new Hammer.Tap({event: 'doubletap', taps: 2})); 
hammertime.add(new Hammer.Tap({event: 'singletap'})); 
//hammertime.get('singletap').requireFailure('doubletap'); 
hammertime.on("doubletap", onDoubleTap); 
hammertime.on("singletap", setupSingleTapTimeout); 

function setupSingleTapTimeout() { 
    cancelSingleTapTimeout(); 
    timeoutId = window.setTimeout(onSingleTap, 300); 
} 

function cancelSingleTapTimeout() { 
    if(timeoutId !== null) { 
    window.clearTimeout(timeoutId); 
    timeoutId = null; 
    } 
} 

function onDoubleTap() { 
    cancelSingleTapTimeout(); 
    ... 
} 

,但我會多過早地保持關注分離,離開這種對錘,工作也似乎喜歡的事就應該知道怎麼做..

這些人知道如何實現這一目標用錘子

回答

1

在潛入庫代碼後,我意識到在兩個手勢之間隱式地設置requireFailure requireFailure也在相反的方向。 在我的情況下,單擊將等待雙擊失敗,而且雙擊將等待單擊失敗,這是沒有意義的,並導致雙擊受到等待的懲罰。

然而有一種方法在一個單一的方向掉落requireFailure條件使用

hammertime.get('doubletap').dropRequireFailure('singletap') 

完整的例子(fiddle