主题
throttle
js
_.throttle(func, [wait=0], [options={}])
创建一个节流函数,该函数每 wait
毫秒最多调用一次 func
。节流函数带有 cancel
方法来取消延迟的 func
调用和 flush
方法来立即调用它们。提供 options
以指示是否应在 wait
超时的前沿和/或后沿调用 func
。func
使用提供给节流函数的最后一个参数来调用。对节流函数的后续调用将返回最后一次 func
调用的结果。
¥Creates a throttled function that only invokes func
at most once per every wait
milliseconds. The throttled function comes with a cancel
method to cancel delayed func
invocations and a flush
method to immediately invoke them. Provide options
to indicate whether func
should be invoked on the leading and/or trailing edge of the wait
timeout. The func
is invoked with the last arguments provided to the throttled function. Subsequent calls to the throttled function return the result of the last func
invocation.
注意:如果 leading
和 trailing
选项为 true
,则仅当在 wait
超时期间多次调用节流函数时,才会在超时的尾端调用 func
。
¥Note: If leading
and trailing
options are true
, func
is invoked on the trailing edge of the timeout only if the throttled function is invoked more than once during the wait
timeout.
如果 wait
是 0
且 leading
是 false
,则 func
调用将推迟到下一个刻度,类似于 setTimeout
,超时为 0
。
¥If wait
is 0
and leading
is false
, func
invocation is deferred until to the next tick, similar to setTimeout
with a timeout of 0
.
有关 _.throttle
和 _.debounce
之间差异的详细信息,请参阅 David Corbacho 的文章。
¥See David Corbacho's article for details over the differences between _.throttle
and _.debounce
.
新增于
¥Since
0.1.0
参数
¥Arguments
func
(函数):要封装的函数。¥
func
(Function): The function to throttle.[wait=0]
(数值):限制调用的毫秒数。¥
[wait=0]
(number): The number of milliseconds to throttle invocations to.[options={}]
(对象):填充长度。¥
[options={}]
(Object): The options object.[options.leading=true]
(布尔):指定在超时的前沿调用。¥
[options.leading=true]
(boolean): Specify invoking on the leading edge of the timeout.[options.trailing=true]
(布尔):指定在超时的后沿调用。¥
[options.trailing=true]
(boolean): Specify invoking on the trailing edge of the timeout.
返回
¥Returns
(函数):返回新的节流函数。
¥(Function): Returns the new throttled function.
示例
¥Example
js
// Avoid excessively updating the position while scrolling.
jQuery(window).on('scroll', _.throttle(updatePosition, 100));
// Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
jQuery(element).on('click', throttled);
// Cancel the trailing throttled invocation.
jQuery(window).on('popstate', throttled.cancel);