移除 Hammer 事件

5
我使用hammer.js库创建事件,如下所示:

Hammer(myElement).on("doubletap", function(evt){
            evt.preventDefault();
        });

我该如何取消已注册的事件?我可以使用Jquery吗?


2
我没有使用过 Hammer 的经验,但是由于语法看起来非常类似于 jQuery,也许 Hammer 使用 .off() 就像 jQuery 一样?不过这只是一个猜测。 - Christofer Eliasson
2个回答

16

它只是简单的Hammer(myElement).off(eventName);

如果您想要使用jQuery,则语法为:

$(myElement).hammer().on(eventName, callback)
如果您想为事件指定“命名空间”,则可以声明如下。
$(myElement).hammer().on("tap.namespace", callback);
$(myElement).hammer().on("tap.anotherNamespace", callback2);

这使得仅分离所需的事件成为可能,例如:

$(myElement).hammer().off("tap.anotherNamespace");

除非我弄错了,Hammer不会存储回调函数,所以你必须指定它。另请参阅http://stackoverflow.com/questions/17367198/hammer-js-cant-remove-event-listener - Marc-André Lafortune
如果您想使用 off() 方法,您必须将 Hammer(myElement) 保存到变量中。http://stackoverflow.com/questions/39512670/hammer-js-off-method-doesnt-work/39513107#39513107 - RaV

1
在hammer.js API的文档中,它指出它不会删除dom事件,使用$(element).off()将无法解决您的问题,一个解决方法是使用hammer.js jQuery包装器,它们的事件使用bind函数在元素上注册。使用unbind来删除所有或特定事件。

$(element).hammer().unbind();

$(element).hammer().bind('swipeleft', 'swiperight', function(){});

这里是包装器:https://github.com/hammerjs/jquery.hammer.js/blob/master/jquery.hammer.js


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