2015-06-18 28 views
0

我使用hammer.js和jquery.hammer.js来处理多种不同类型的事件(主要是轻敲事件)。如何使用Hammer.js禁用然后重新启用Hammer Event?

我做了一个包装函数,用于任何/所有轻击事件侦听器声明。 这是功能。

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

没关系,我有一个愚蠢的时刻有...

的问题是,我是直接而不是调用事件侦听器通过我的包装功能,...的OnClick

在其他也就是说改变...

if(TurnBackOnAfterStartCallback) 
{ 
    $(target).hammer().on("tap", CallbackFunction); 
} 

if(TurnBackOnAfterStartCallback) 
{ 
    OnClick(target, CallbackFunction, TurnBackOnAfterStartCallback); 
} 
相关问题