JS--函數(shù)節(jié)流+函數(shù)防抖

一、函數(shù)節(jié)流

某函數(shù)在指定時(shí)間間隔內(nèi)執(zhí)行,如:每1秒執(zhí)行一次

1、第一次就執(zhí)行

// 對(duì)函數(shù)進(jìn)行 節(jié)流
function throttle (fn,  delay = 1000) {
  let flag = true;
  return (...args) => {
    if (flag) {
      flag = false;
      fn(...args);
      setTimeout(() => {
        flag = true;
      }, delay);
    }
  };
}
// 需要被節(jié)流的 函數(shù)
function scrollHandler (arg) {
    console.log(`${arg}--被執(zhí)行了`);
}
// 被節(jié)流的函數(shù) -- 節(jié)流限制: 每 1000 毫秒執(zhí)行一次
const throttleFunc = throttle(scrollHandler, 1000);
let i = 0;
// 模擬 頁(yè)面滾動(dòng)事件
const interval = setInterval(() => {
    console.log(`我是:${i}`);
    throttleFunc(i++);
}, 10);

2、首次不執(zhí)行,需等待delay時(shí)間后才能執(zhí)行第一次

function throttle(fn,  delay = 1000) {
  let prevTime = Date.now();
  return function () {
    let curTime = Date.now();
    if (curTime - prevTime > delay) {
      fn.apply(this, arguments);
      prevTime = curTime;
    }
  };
}
// 需要被節(jié)流的 函數(shù)
function scrollHandler (arg) {
    console.log(`${arg}--被執(zhí)行了`);
}
// 被節(jié)流的函數(shù) -- 節(jié)流限制: 每 1000 毫秒執(zhí)行一次
const throttleFunc = throttle(scrollHandler, 1000);
let i = 0;
// 模擬 頁(yè)面滾動(dòng)事件
const interval = setInterval(() => {
    console.log(`${i} --- 進(jìn)來(lái)了,但是不知道有沒(méi)有執(zhí)行`);
    throttleFunc(i++);
}, 10);

二、函數(shù)防抖

當(dāng)持續(xù)觸發(fā)事件時(shí),只有在規(guī)定時(shí)間段內(nèi)沒(méi)有再觸發(fā)事件,事件處理函數(shù)才會(huì)執(zhí)行一次,如果設(shè)定的時(shí)間到來(lái)之前,又一次觸發(fā)了事件,就重新開(kāi)始延時(shí)。
就像游戲里放技能時(shí)需要讀條一樣,讀條結(jié)束才能放出技能,但是在讀條結(jié)束前,你又按了一次技能,那么只能重新讀條。

function debounce(func, wait) {
    let timeout;
    return function() {
        const context = this;
        const args = arguments;
        clearTimeout(timeout);
        timeout = setTimeout(() => {
            func.apply(context, args);
        }, wait);
    };
}
// 使用
window.onscroll = debounce(function() {
  console.log('debounce');
}, 1000);



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 實(shí)際上啊,今天早上本來(lái)想干點(diǎn)別的,但是在吃早餐的時(shí)候?yàn)g覽了下掘金,然后看到了這篇博文 Jake的關(guān)于圖片懶加載 ...
    6J閱讀 9,957評(píng)論 1 23
  • 函數(shù)節(jié)流 初識(shí)概念: 生活中有很多這樣的例子,小學(xué)的時(shí)候課本里講要節(jié)約用水隨時(shí)關(guān)水龍頭,燈不要一直開(kāi)著出門或者睡覺(jué)...
    1海內(nèi)無(wú)雙1閱讀 758評(píng)論 1 3
  • 導(dǎo)讀: 函數(shù)節(jié)流和函數(shù)防抖是我們解決頻繁觸發(fā)DOM事件的兩種常用解決方案,都對(duì)提升頁(yè)面性能有顯著的功效。 例子: ...
    飲杯夢(mèng)回酒閱讀 1,156評(píng)論 0 5
  • 文/寧律 我喜歡文字, 文字卻不喜歡我。 我看她, 那么柔美, 那么婀娜多姿。 她看我, 那么無(wú)知, ...
    小胡涂神兒閱讀 318評(píng)論 0 1
  • 2016年7月14日,是一個(gè)激動(dòng)人心的日子。這天,我的女兒誕生,我升級(jí)為父親,初為人父,有忙碌、有喜悅、更有激動(dòng)...
    星蘉厖閱讀 378評(píng)論 0 1

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