节流与防抖
1.节流(throttle)
节流就好像是英雄联盟里面的人物的技能,技能释放后需要冷却,冷却完毕后才能再次释放技能。
节流的大概意思就是:事件触发后函数执行,在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秒后才回到泉水。
防抖的大概意思就是:不管事件被触发多少次,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)
}
}