我使用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/
答案 0 :(得分:0)
没关系,我那里有一个愚蠢的时刻......
问题是我直接调用了事件监听器而不是通过我的包装函数OnClick ...
换句话说改变......
if(TurnBackOnAfterStartCallback)
{
$(target).hammer().on("tap", CallbackFunction);
}
到
if(TurnBackOnAfterStartCallback)
{
OnClick(target, CallbackFunction, TurnBackOnAfterStartCallback);
}