使用Hammer.js 2.0.4在当前平移期间强制“panend”

时间:2014-12-02 17:16:15

标签: javascript hammer.js

我正在使用Hammer.js来监听元素上的水平平移。 当deltaX达到阈值时,我想杀死当前的pan强制“panend”并在下次用户尝试“panstart”时恢复平移。

阅读文档,现在看来图书馆似乎无法实现。 有人知道解决方案吗?

    var mc = new Hammer.Manager(@option_elm.get(0),
        recognizers: [
            [Hammer.Pan,{direction: Hammer.DIRECTION_HORIZONTAL}]
        ]
    )

    mc.on('panleft', function(e) {
        e.kill() // something simple like this...?
    })

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 Hammer.js有一个名为stop();的内置方法。您可以在“penleft”事件函数中使用它:mc.stop();

http://hammerjs.github.io/api/#stop%28[force]%29

这不会强迫“penend”。 Hammer.js将忽略所有输入。不幸的是,这种方法存在巨大的bug。事件对象将在所有新输入上具有错误的参数: https://github.com/hammerjs/hammer.js/issues/811

所以我曾经使用过一个名为“isFired”的辅助变量。您的代码可能如下所示:

var mc = new Hammer.Manager(@option_elm.get(0),
        recognizers: [
            [Hammer.Pan,{direction: Hammer.DIRECTION_HORIZONTAL}]
        ]
    ),
    isFired = false;

mc.on('panstart', function(e) {
     isFired = false;
});
mc.on('panleft', function(e) {
    if (!isFired) {
        isFired = true;
        yourCustomCallback();
    }
});
mc.on('panend', function(e) {
     isFired = false;
});

在“penstart”和“panend”上将此变量重置为false非常重要。