[英]How do I disable and then re-enable a Hammer Event properly using Hammer.js?
我正在使用Hammer.js和jquery.hammer.js来处理多种不同类型的事件(主要是点击事件)。
我做了一个包装器函数,可用于任何/所有tap事件监听器声明。 这就是功能。
var OnClick = function(button, CallbackFunction, TurnBackOnAfterStartCallback)
{
if(TurnBackOnAfterStartCallback != false)
{
TurnBackOnAfterStartCallback = true;
}
if(!button)
{
LogResult("Error: Attempted to create Hammer Click Event Listener without assigning a jQuery Object to listen too...");
return;
}
if(!CallbackFunction)
{
LogResult("Error: Attempted to create Hammer Click Event Listener without assigning a Callback Function...");
return;
}
$(button).hammer().on("tap", function(event)
{
var target = event.target;
// Disable the button so that we can't spam the event....
$(target).hammer().off("tap");
// We receive the event Object, incase we need it...
// Then we call our CallBackFunction...
if(CallbackFunction)
{
CallbackFunction(target);
}
// Renable the button for future use if need be.
if(TurnBackOnAfterStartCallback)
{
$(target).hammer().on("tap", CallbackFunction);
}
});
};
当我使用此功能注册事件时,它会按预期工作。 首先,它禁用了事件监听器,因此您无法通过单击按钮100次来向该事件发送垃圾邮件。
$(target).hammer().off("tap");
然后,如果存在回调功能,它将执行任何回调功能...
if(CallbackFunction)
{
CallbackFunction(target);
}
最后,除非我们指定不会重新打开按钮,否则我们将其重新启用以备将来使用...
// Renable the button for future use if need be.
if(TurnBackOnAfterStartCallback)
{
$(target).hammer().on("tap", CallbackFunction);
}
这在第一次事件启动过程中完美运行。但是,一旦我再次触发事件,由于某种原因,回调函数将发送给事件而不是event.target。
如果我删除了.off和.on调用,则它可以按预期工作,但可能会被垃圾邮件...
作为一个实时示例,请检查此jsfiddle ...它将结果打印到控制台...第一个输出正确,此后的所有输出均与预期不符。 https://jsfiddle.net/xupd7nL1/12/
没关系,我在那里呆了一会儿……
问题是我直接调用事件监听器,而不是通过包装函数OnClick调用。
换句话说,改变...
if(TurnBackOnAfterStartCallback)
{
$(target).hammer().on("tap", CallbackFunction);
}
至
if(TurnBackOnAfterStartCallback)
{
OnClick(target, CallbackFunction, TurnBackOnAfterStartCallback);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.