防抖与节流

防抖:

触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。

节流:

 高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率

代码实现节流

只要触发,就用 Date 获取现在的时间,与上一次的时间比较。

  • 如果时间差大于了规定的等待时间,就可以执行一次;
    • 目标函数执行以后,就更新 previous 值,确保它是“上一次”的时间。
  • 否则就等下一次触发时继续比较。
  •   function throttle(func, wait) {
    
        let previous = 0;
    
        return function() {
            let now = +new Date();
            let context = this;
    
            if (now - previous >= wait) {
                func.apply(context, arguments);
                previous = now; // 执行后更新 previous 值
            }
        }
    }
     

    代码实现防抖

  • // 第一个参数是需要进行防抖处理的函数,第二个参数是延迟时间,默认为1秒钟
    function debounce(fn, delay = 1000) {
    // 实现防抖函数的核心是使用setTimeout
        // time变量用于保存setTimeout返回的Id
        
        let time = null
        
        function _debounce() {
            // 如果time不为0,也就是说有定时器存在,将该定时器清除
            if (time !== null) {
                clearTimeout(time)
            }
            
            time = setTimeout(() => {
                fn()
            }, delay)
        }
        
        // 防抖函数会返回另一个函数,该函数才是真正被调用的函数
        return _debounce
    }
     

    二者应用场景

  • 防抖应用场景

  • 输入框频繁输入内容,搜索或者提交信息。
  • 频繁点击按钮,触发某个事件。
  • 监听浏览器滚动事件。
  • 监听用户缩放浏览器resize事件。
  • 节流引应用场景

  • 用户点击提交按钮 一定时间内只能触发一次 例如短信验证码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜田里快乐的猹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值