Lodash _.debounce

2021-09-24 10:13 更新

_.debounce(func, [wait=0], [options=])

創(chuàng)建一個(gè) debounced(防抖動(dòng))函數(shù),該函數(shù)會(huì)從上一次被調(diào)用后,延遲 wait 毫秒后調(diào)用 func 方法。 debounced(防抖動(dòng))函數(shù)提供一個(gè) cancel 方法取消延遲的函數(shù)調(diào)用以及 flush 方法立即調(diào)用。 可以提供一個(gè) options(選項(xiàng)) 對(duì)象決定如何調(diào)用 func 方法,options.leading 與|或 options.trailing 決定延遲前后如何觸發(fā)(注:是 先調(diào)用后等待 還是 先等待后調(diào)用)。 func 調(diào)用時(shí)會(huì)傳入最后一次提供給 debounced(防抖動(dòng))函數(shù) 的參數(shù)。 后續(xù)調(diào)用的 debounced(防抖動(dòng))函數(shù)返回是最后一次 func 調(diào)用的結(jié)果。注意: 如果 leading 和 trailing 選項(xiàng)為 true, 則 func 允許 trailing 方式調(diào)用的條件為: 在 wait 期間多次調(diào)用防抖方法。如果 wait 為 0 并且 leading 為 false, func調(diào)用將被推遲到下一個(gè)點(diǎn),類似setTimeout為0的超時(shí)。SeeDavid Corbacho's articlefor details over the differences between_.debounce and_.throttle.

添加版本

0.1.0

參數(shù)

  1. func (Function): 要防抖動(dòng)的函數(shù)。
  2. [wait=0] (number): 需要延遲的毫秒數(shù)。
  3. [options=] (Object): 選項(xiàng)對(duì)象。
  4. [options.leading=false] (boolean): 指定在延遲開(kāi)始前調(diào)用。
  5. [options.maxWait] (number): 設(shè)置 func 允許被延遲的最大值。
  6. [options.trailing=true] (boolean): 指定在延遲結(jié)束后調(diào)用。

返回

(Function): 返回新的 debounced(防抖動(dòng))函數(shù)。

例子

// 避免窗口在變動(dòng)時(shí)出現(xiàn)昂貴的計(jì)算開(kāi)銷。
jQuery(window).on('resize', _.debounce(calculateLayout, 150)); 
// 當(dāng)點(diǎn)擊時(shí) `sendMail` 隨后就被調(diào)用。
jQuery(element).on('click', _.debounce(sendMail, 300, {  'leading': true,  'trailing': false})); 
// 確保 `batchLog` 調(diào)用1次之后,1秒內(nèi)會(huì)被觸發(fā)。
var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
var source = new EventSource('/stream');
jQuery(source).on('message', debounced); 
// 取消一個(gè) trailing 的防抖動(dòng)調(diào)用jQuery(window).on('popstate', debounced.cancel);


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)