如何将'tap'和'doubletap'绑定到Hammer.js中的相同元素?

时间:2014-03-27 09:22:48

标签: javascript cordova hammer.js

我正在(尝试)为我正在使用cordova进行eclipse的移动游戏创建一些基本元素。我想在这里做的主要事情是在同一个元素上设置两个tap事件。下面的代码显示了我是如何尝试解决这个问题的,但是当我尝试双击时,它将无法被检测到 - 我得到的只是两个单击。我尝试了不同的东西,但没有一个帮助过。

当双击失败时,我也会在控制台中收到此警告:“尝试完成输入事件,但输入事件接收器已经处理”。

var doubletapped = false,
    tapped = false;
$(function() {
    var element = document.getElementById('blue');
    var hammertime = Hammer(element).on("tap doubletap", function(event) {
        if (event.type == 'doubletap') {
            tapped = false;
            doubletapped = true;
            alert('doubleTap!');
            console.log('doubleTap!');
        }
        if (event.type == 'tap') {
            doubletapped = false;
            tapped = true;
            alert('single tap!');
            console.log('singleTap!');
        }
    });
});

正如在这个Hammer.js changelog中所解释的那样,我设置了tap_always = false,但它并没有什么区别。您有什么推荐的吗?有没有其他库我可以做同样的事情没有这个问题?

我想要实现的是检测元素上的不同点击或/和手势,然后执行不同的操作。例如,如果单击元素#1,则播放音频文件#1,如果双击同一元素,则播放音频文件#2。

帮助将不胜感激!

干杯

1 个答案:

答案 0 :(得分:2)

试试这个 -

var hammer = new Hammer.Manager(element, {});

var singleTap = new Hammer.Tap({event: 'singletap' });
var doubleTap = new Hammer.Tap({event: 'doubletap', taps: 2 });

hammer.add([doubleTap, singleTap]);

doubleTap.recognizeWith(singleTap);

singleTap.requireFailure([doubleTap]);

hammer.on('singletap', function() { console.log('single tap!') });
hammer.on('doubletap', function() { console.log('double tap!') });