js实现防抖与节流

11 篇文章 0 订阅
5 篇文章 0 订阅

防抖与节流

防抖:

当事件被触发的时候,设定一个周期,如果这个周期之内,这个事件又被触发了,那么就在设定一个周期,一直到这个周期内这个事件不在被触发,才会执行这个事件

手写:

function debounce (fun, delay) {
 //防抖函数需要传入2个参数,一个为事件函数,一个为周期时间
	const _this = this; //先将this保存下来,保持this的指向相同
    const timer = null; //设定一个定时器,当调用的时候西安清空定时器
    return function() { //返回一个函数
        const args = arguments; //需要对fn的参数进行保存
        if(timer) { // 如果定时器存在的话,我们需要对定时器进行清空,重新计时
            clearTimeout(timer)
        }
        timer = setTimeout( () => {
            fun.call(_this, ...args); //执行事件函数,需要用到之前保存的this和arguments
        }, delay)
    }
}

节流:

当事件被触发的时候,设定一个事件周期,不管期间这个事件被触发了多少次,到了这个时间,就会执行一次事件。之后如果还有事件的触发,就再重新设定一个周期,到时间执行。

手写:

function throttle(fun, delay) {
    let _this = this; //也是需要对this进行保存
    let timer = null;
    return function() {
        const args = arguments;
        if(!timer) { //直到定时器不存在,需要先设置一个新的定时器
            timer = setTimeout( () => {
                timer = null; //需要将定时器清零
                fun.call(_this, ...args); //执行我们的事件函数
            }, delay)
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值