2015-06-18 56 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); 
} 
相關問題