JavaScript-节流函数的实现

1、对节流函数该怎么理解

日常小案例:

老师在上完课后给大家【五分钟】询问大家有没有什么问题要问

但是在【五分钟】之内,不管有多少同学 来问问题,都只会【解答一个问题】

如果在解答一个问题后,5分钟过后还没有同学问问题,那么就下课

所以用三句话理解就是:

  1. 当事件触发时,会触发这个事件的响应函数
  2. 当事件密集触发时,节流函数会按照一定的频率来执行函数
  3. 不管在这个中间有多少次触发这个事件,执行函数的频率总是固定的

2、拙劣的图解

3、 节流的应用场景

  • 监听页面的滚动事件
  • 鼠标的移动事件
  • 用户频繁点击按钮操作

4、节流的简单实现

//简单实现
function throttle(fn, interval) {
    //1.记录上一次的开始时间
    let lastTime = 0

    //2.事件触发时,真正的执行函数
    const _throttle = function (...args) {

        //2.1 获取当前事件触发时的时间
        const nowTime = new Date().getTime()

        //2.2 使用当前触发的时间和之前的时间间隔以及上一次开始的时间, 计算出还剩余多长事件需要去触发函数
        const remainTime = interval - (nowTime - lastTime)
        if (remainTime <= 0) {
            //2.3 真正触发函数
            fn.apply(this, args)
            //2.4 保留上次触发的时间
            lastTime = nowTime
        }
    }
    return _throttle
}

5、增加功能-第一次是否立即执行

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值