2016-08-15 90 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