使用Hammer.js 2.0.4在当前拖动过程中强制执行“panend”。

3

我正在使用Hammer.js监听元素的水平滑动。当deltaX达到一个阈值时,我想强制结束当前滑动并触发"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

我有同样的问题。 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非常重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接