// throttle的思想是降低触发的频率 减少一段时间内触发的频率 即是节流
// 清除延时器
/*
清除延时器的原理
1.设置延时器时,timer=setTimeout(...),这里的timer是个数字,
代表是在系统中是第几个延时器
2.clearTimeout(timer)清楚延时器时,只会把系统中的对应的第几个延时器清楚,
但是timer还是原来的数字并不会变为null
*/
function clearTimer(timer){
if (timer) {
clearTimeout(timer)
}
return null
}
// 节流函数
function throttle(func,wait){
let timer = null,
previous = 0 // 记录上一次操作的时间
return function(...params){
let remaining = wait - (+new Date() - previous)
// 两次操作间隔时间超过500ms(或者第一次触发),立即执行函数
if (remaining <= 0) {
func.call(this,...params)
// 记录操作的时间 留给下一次使用
previous = +new Date()
timer = clearTimer(timer)
return
}
// 两次间隔时间没有超过500ms,并且还没设置过定时器,此时设置定时器,等待执行即可
if (!timer) {
timer = setTimeout(()=>{
func.call(this,...params)
// 记录操作的时间 留给下一次使用
previous = +new Date()
// 执行后吧定时器清掉
timer = clearTimer(timer)
},remaining)
}
}
}
手写节流函数(主要业务代码不含格式校验)
最新推荐文章于 2024-02-08 09:25:20 发布