節(jié)流函數(shù)及其應(yīng)用

建議使用 lodash 插件里面的 throttle 函數(shù)來實現(xiàn)

1、節(jié)流函數(shù)簡單原理

/**
 * 節(jié)流函數(shù)
 * 定義:指連續(xù)觸發(fā)事件但是在 n 秒中只執(zhí)行一次函數(shù)(第一次)
 * 作用:節(jié)流會稀釋函數(shù)的執(zhí)行頻率
 * param1、param2 為額外定制接受的參數(shù)
 */
function throttle (fn, delay, param1 = '', param2 = '') {
  /* 獲取接收的參數(shù),排除掉前兩位固定的參數(shù) */
  const params = [...arguments].splice(2)
  /* 用戶執(zhí)行時的時間,初始值為 0 */
  let clickTime = 0
  return function () {
    /* 用戶執(zhí)行時的時間戳 */
    const now = Date.now()
    /* 若用戶執(zhí)行時的時間戳 - 用戶執(zhí)行時的時間 > 規(guī)定時間  */
    if (now - clickTime > delay) {
      /* 執(zhí)行函數(shù),并將參數(shù)設(shè)置到函數(shù)的 arguments 對象中 */
      fn.call(this, ...params)
      /* 將用戶執(zhí)行時的時間戳賦值給用戶執(zhí)行時的時間 */
      clickTime = now
    }
  }
}

2、節(jié)流函數(shù)的應(yīng)用

/**
 * 某個元素點擊要執(zhí)行的事件
 * 假設(shè)要對這個事件進行節(jié)流
 */
function task (params = 'params') {
  console.log(1, params);
}

/**
 * 節(jié)流函數(shù)的應(yīng)用
 */
$('.dom').on('click', throttle(task, 1000, 'hehe'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容