d.debounce()
d.debounce( func, wait,options )
- 返回: Function
创建一个防抖函数,该函数会在上一次调用后 等待 wait
毫秒 才执行 func
。
d.debounce( func, wait,options ) from @1.0
- func
- 类型: Function
- 描述: 需要防抖处理的函数。
- wait(default:
0
)- 类型: Number
- 描述: 延迟的毫秒数。
- options
- 类型: PlainObject
- 描述: 配置对象。
- [options.leading=false] (boolean):是否在延迟开始时调用一次
func
。 - [options.maxWait] (number):在被调用前允许延迟的最大时间。
- [options.trailing=true] (boolean):是否在延迟结束时调用一次
func
。
- [options.leading=false] (boolean):是否在延迟开始时调用一次
防抖函数具有以下方法:
cancel
:取消延迟中的函数调用。flush
:立即执行延迟中的函数调用。
可以通过 options
参数控制:
- leading(默认
false
):是否在延迟开始时调用一次func
。 - trailing(默认
true
):是否在延迟结束时调用一次func
。
func
会接收最近一次调用时传入的参数,并返回上一次执行的结果。
WARNING
当 leading
和 trailing
同时为 true
时,只有在等待期间多次调用时,func
才会在延迟结束时(trailing edge)再次触发。
如果 wait
为 0
且 leading
为 false
,func
的调用会被推迟到下一次事件循环(效果类似 setTimeout(fn, 0)
)。
该助手特别有用。因此domtify内置了此功能。我们看以下例子:
js
// 当窗口大小不断变化时,避免进行高开销的计算。
d(window).on("resize", d.debounce(calculateLayout, 150))
// 点击时调用 `sendSms`,并防抖后续的点击调用。
d(selector).on(
"click",
d.debounce(sendSms, 300, {
leading: true,
trailing: false,
}),
)