2012-08-17 38 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