2014-09-20 61 views
0

jQuery中,我有這樣的事情:如何防止排隊的事件回調觸發?

$("body").on("touchmove", function() { ...do something expensive }); 

我注意到,當迅速拖着我的手指周圍,回調堆積,常常需要時間即使我已經停止幾秒拖拽即可完成。

有沒有辦法取消尚未解僱的回調?我試過以下...

$("body").on("touchend", function() { 
    $("body").off("touchmove"); 
}); 

...但是,這似乎並沒有工作。

回答

0

您可以做幾件事情,但請謹慎使用body作爲委託事件,因爲如果造型設置不正確(document更可靠),「身體」將不會響應。

1)斷開/重新連接時完成:

var doSomethingExpensive = function(){ 
    // Disconnect event 
    $("body").off("touchmove"); 
    ...do something expensive 
    // Reconnnect event handler 
    $("body").on("touchend", doSomethingExpensive) 
}; 

$("body").on("touchend", doSomethingExpensive); 

2)使用一個忙/保護標誌

var busy = false; 
$("body").on("touchmove", function() { 
    if (!busy){ 
     busy = true; 
     ...do something expensive 
     busy = false; 
    } 
}); 

3)使用節流事件插件

基本上你可以指定它的頻率可以觸發,並將代碼類似於上面的代碼,但基於計時器。 (我沒有具體的建議,建議使用谷歌搜索)。

這些選項中最簡單的可能就是警戒標誌,它很簡單明瞭是怎麼回事。