hammer.js,防止“ tap”触发“ doubletap”

问题描述 投票:0回答:1

我有以下设置

function hammerIt(elm) {
    hammertime = new Hammer(elm, {});
    hammertime.on('tap doubletap pan pinch panstart panend pinchend swipe swipeleft swiperight swipedown swipeup', function(ev) {

        // Doesn't work...
        var doubletap = hammertime.get('doubletap');
        var tap = hammertime.get('tap');
        doubletap.recognizeWith(tap);
        tap.requireFailure(doubletap);

        if (ev.type == 'tap') {
            doSomething();
        }

        if (ev.type == 'doubletap') { // This is never fired....
            doSomethingElse();
        }

        // etc.
}

当我双击元素/单击元素时,将同时触发tap和doubletap事件。我只想触发双击,但以某种方式我的代码不起作用?是因为我使用的是on(events)和.get(“ event name”),而不是像https://hammerjs.github.io/require-failure/中的示例那样的专用事件,还是我遗漏了其他东西?

hammer.js
1个回答
0
投票

谢谢约翰·史密斯,根据您的小提琴,我想出了一个可行的解决方案:

function hammerIt(elm) {
    hammertime = new Hammer.Manager(elm);

    var doubletap = new Hammer.Tap({event: 'doubletap', taps: 2});
    var tap = new Hammer.Tap({event: 'tap'});
    var pan = new Hammer.Pan();
    var pinch = new Hammer.Pinch({enable:true});
    var swipe = new Hammer.Swipe();

    hammertime.add([doubletap, tap, pan, pinch, swipe]);

    hammertime.get('tap').requireFailure('doubletap');

    hammertime.on('tap doubletap pan pinch panstart panend pinchend swipe swipeleft swiperight swipedown swipeup', function(ev) {
        if (ev.type == 'tap') {
            doSomething();
        }

        if (ev.type == 'doubletap') {
            doSomethingElse();
        }

        // etc.
    }
}

我认为问题出在使用“ new Hammer(elem ...”)而不是“ new Hammer.Manager(elem)”。这样,我必须手动添加识别器,而不是使用默认设置,但至少可以使用符合预期:-)

© www.soinside.com 2019 - 2024. All rights reserved.