2012-08-17 73 views

回答

14

你可以編寫一個簡單的throttle debounce function來限制滾動事件每秒處理的時間。

function debounce(method, delay) { 
    clearTimeout(method._tId); 
    method._tId= setTimeout(function(){ 
     method(); 
    }, delay); 
} 

$(window).scroll(function() { 
    debounce(handleScroll, 100); 
}); 

這將確保有每個調用之間至少100毫秒到handleScroll(或者,換句話說,這就是所謂的以每秒最多10次)。作爲zzzzBov指出,Zakas描述的節流功能實際上是一個去抖動功能。不同之處在於,去抖動會丟棄多餘的滾動事件,而油門功能應該排隊等待稍後處理(但是以給定的最大速率)。

在滾動事件的情況下,你不希望真正的節流。

+3

這實際上是[debouncing](http://davidwalsh.name/function-debounce),與限制稍有不同。 – zzzzBov 2014-02-25 18:27:50

+0

@zzzzBov:你是對的,謝謝你的提升。 – PPvG 2014-02-26 11:24:37