笔记-节流与防抖

132 阅读1分钟

节流与防抖

1.节流(throttle)

节流就好像是英雄联盟里面的人物的技能,技能释放后需要冷却,冷却完毕后才能再次释放技能。

image.png

节流的大概意思就是:事件触发后函数执行,在n秒后函数才能再次执行

/**
* @param {Function} fn 需要节流的函数
* @param {Number} time 间隔时间-毫秒
*/
function throttle (fn, time) {
    // 起始的时间戳,初始为0
    let startTime = 0
    return function () {
        // 触发时的时间戳
        let nowTime = +new Date()
        // 如果触发时的时间戳减去起始时间戳大于等于间隔时间,那么执行函数
        if (nowTime - startTime >= time) {
            // 执行函数
            fn.apply(this, arguments)
            // 将本次触发的时间作为下次的起始时间
            startTime = nowTime
        }
    }
}

2.防抖(debounce)

防抖就好像是英雄联盟里面的回城,我们一直按B键,回城的时间就一直重新开始计算,直到按下B键后等待8秒后才回到泉水。

image.png

防抖的大概意思就是:不管事件被触发多少次,n秒内只执行最后一次。

/**
* @param {Function} fn 回调函数
* @param { Number } 时间-毫秒
*/
function (fn, delay) {
    let timer = null
    return function () {
        if (tmier) clearTimeout(timer)
        timer = setTimeout(() => {
            fn.apply(this, arguments)
        }, delay)
    }
}