【问题标题】:hammer.js, prevent "tap" from firing on "doubletap"hammer.js,防止“tap”在“doubletap”上触发
【发布时间】:2019-12-10 09:44:54
【问题描述】:

我有以下设置

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.
}

当我双击/单击元素时,点击和双击事件都会被触发。我只希望双击触发,但不知何故我的代码不起作用?是因为我使用 on(events) 和 .get("event name") 而不是 https://hammerjs.github.io/require-failure/ 示例中的专用事件,还是我错过了其他东西?

【问题讨论】:

标签: hammer.js


【解决方案1】:

谢谢你 john Smith,根据你的小提琴,我想出了一个可行的解决方案:

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)”。这样我必须手动添加识别器而不是使用默认设置,但至少它按预期工作:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多