函数防抖,函数节流。详解!!!

函数防抖:debounce

我们在平时开发的时候,会有很多场景会频繁触发事件,比如说搜索框实时发请求, onmousemove, resize, onscroll等等,有些时候,我们并不能或者不想频繁触发事件, 咋办呢?这时候就应该用到函数防抖和函数节流了!

//应用场景,百度搜索框,监控文本框内容变化, 但是他不是时时刻刻监控,我们打完字后会等一下才自动搜索,可以自己取百度搜索体验一下

监控窗口发生变化的函数,如果不用函数防抖,
那么在拖动的过程中会触发很多次,这不是我们想看到了

  • 1.不添加函数防抖的window.onresize函数
    当你窗口拖动时,会连续触发很多次,输出很多次aaaa。
window.onresize = function () {
   
      console.log("aaaa");
    }

在这里插入图片描述

  • 2.简单封装过后的函数防抖,运行过后发现并没有什么卵用,只不过是延迟了一秒在重复上面的操作,自己试试 体验一下这个思考的过程。然后我们再继续优化
window.onresize = function () {
   
      debounce(function () {
   
        console.log("a");
      }, 1000)
    }
    /**
     * 函数防抖
     * callback,传入需要运行的函数
     * time ,多少时间后运行这个函数
     */
    function debounce(callback, time) {
   
      setTimeout(function () {
   
        callback();
      }, time)
    }
  • 3.我们再换一种方式处理,每次调用setTime之前我们把计时器id清除,这个时候就发现 一个粗糙的函数防抖已经做好了,但是这个有个缺点,定义了一个timer污染了全局变量,所以并不是完美的,还需要继续优化
window.onresize = function () {
   
      debounce(function () {
   
        console.log("a");
      }, 1000)
    }
    /**
     * 函数防抖
     * callback,传入需要运行的函数
     * time ,多少时间后运行这个函数
     */
    var timer;
    function debounce(callback, time) {
   
      clearTimeout(timer)
      timer =
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值