2013-02-21 100 views
0

我有一個問題,即一個避免雙重事件jQuery的停止雙重事件

所以開始與我有一段代碼觸發

jQuery(window).trigger('swipeForward'); 

所以這個監聽這個觸發

jQuery(window).on('swipeForward', swipeHandlerNext); 

滑動處理程序的想法是,使用戶不能滑動兩次並創建雙重事件

這將然後執行swipeHandlerNext功能

function swipeHandlerNext(event) { 

    // If event isn't already marked as handled, handle it 
    if(event.handled !== true) { 

     // Kill event handler, preventing any more clicks 
     jQuery(".pageSize").off("swipeForward"); 

     // Do your stuff here 
     pageSize = jQuery(".mainHeader").width(); 
     slide("forward", pageSize); 

     console.log(" swipe complete page forward via swipe"); 

     // Mark event as handled 
     event.handled = true; 
    } 

    return false; 
} 

這顯然執行滑動功能。這是一個有.animate命令

function slide(data, pageSize) { 


    if (!pageSize) { 
    pageSize = jQuery(".mainHeader").width(); 
    } 

    var promise = calcLeft(data, pageSize); 


    jQuery.when(promise).then(function(result) { 

     console.log(result); 

     jQuery('#pageHolder').delay(500).animate({ 
      left: result 

      }, 400, function() { 
      console.log("animation started"); 
      calcNav(pageSize); 
      calcPage(pageSize); 
      jQuery(".pageSize").on("swipeForward", swipeHandlerNext); 
      console.log("animation complete"); 

     }); 


    }); 

} 

然而,它不是防止雙重幻燈片。

感謝所有幫助

回答

2

爲什麼Off()在你的榜樣不起作用

jQuery的off()方法希望選擇到match the one originally passed to .on() when attaching event handlers

在您的初始事件綁定中,您將事件附加到元素jQuery(window).on(...)。但是在處理程序函數中,您正在刪除並使用jQuery('.pageSize').off(...)jQuery('.pageSize').on(...)將事件重新附加到.pageSize元素。

換句話說,您不是在實際上刪除綁定到window元素的事件處理程序,因此用戶可以繼續滑動。

爲什麼event.handled不會在你的榜樣工作

每次刷卡事件發生,一個單獨event對象被創建並傳遞到處理程序。因此event對象不是全局變量,您可以在後續的滑動中修改並檢查其狀態。

以下的例子

  1. 匹配傳遞給on()off()方法的選擇可能的解決方案。
  2. 設置和取消設置一個全局變量作爲滑動正在進行的指示。
+0

嗨..謝謝..這個問題真的源於這裏.. http://stackoverflow.com/questions/14996012/jquery-animate-periodocially-not-running任何想法?我拉我的頭髮 – Dan 2013-02-22 00:56:47

+0

@丹整體來說,它似乎是同一個問題。用當前問題中描述的問題的可能解決方案更新了我的答案。看看這些是否有幫助。 – Boaz 2013-02-22 01:02:56

+0

嗨 - 我現在正在所有的地方使用窗口。是的,我在那裏很厚。它不能在某個時間工作的原因雖然很奇怪。這可能與我的刷卡代碼有關嗎?看到我使用功能幻燈片兩個刷卡事件和點擊。我真的沒有得到它是如何工作的,有時候並不是 - 特別是當事件被排序時 – Dan 2013-02-22 01:05:42