Js防抖函数

更新日期: 2019-08-23阅读: 2.5k标签: 防抖

1.使用场景:

是在写keyup事件的时候,每次触发,都会请求后台接口,为了避免,每次请求,键盘弹起之后,隔上一段时间再去请求,所以用防抖函数


2.概念:

(1)什么是防抖:多次事件触发后、事件处理函数只执行一次,并且是在触发操作结束时执行。

(2)原理:延时操作处理函数、若设定的延时到来之前、再次触发函数、则清除上一次的延时操作定时器、重新定时


3.使用:

原先代码这样写的:

$("#key").on("keyup",keyupfn());
      function keyupfn(){
          var timer=null;
          return function (){                    
              clearTimeout(timer);
              timer=setTimeout(function(){
              var Val=$("#key").val();
              $.ajax({
                  type: "post",
                  url: "",
                  data: {name:Val},
                  dataType: "json",
                  success: function(res) {
                                    // 请求成功
                  }
               });
           },800);
      }
}

使用封装后的:

注:第一个this,只是在刚开始,keyup事件,监听的时候,被调用了,之后,每次触发keyup事件,都是调用的debounce函数return出来的函数

关于this的指向:①谁调用函数,this就指向谁;②debounce这个外层函数与里面return出来的函数的调用者,是没有关系的;③debounce是window调用的,返回的函数是触发keyup调用的,是keyup事件触发了返回的函数,而不是debounce方法

function debounce(method,delay) {
         let timer = null;
         console.log("window", this) //1、 debounce是window调用的
         return function () {
              console.log("keyup事件调用的11111", this) // 2、this指向$("#key)
              let self = this,
                  args = arguments;
              timer && clearTimeout(timer);
              timer = setTimeout(function () {
                  method.apply(self,args);
              },delay);
         }
}
$("#key").on("keyup",debounce(function () {
        var Val=$("#key").val();
        console.log("keyup事件调用的222222", this) // 3、 this指向$("#key)
        $.ajax({
             type: "post",
             url: "",
             data: {name:Val},
             dataType: "json",
             success: function(res) {
                        
             }
        });
    },1000)
);

 

链接: https://www.fly63.com/article/detial/5474

js的抖动,解决方法 : 防抖&节流

在 js 中 改变窗口大小 & 上下滚动滚动条 & 反复向输入框中输入内容 ... , 如果绑定了相应的事件 , 这些事件的触发频率非常高, 严重影响用户体验和服务器的性能 , 这种问题 在js中 就叫 js 的抖动 .

浅谈js防抖和节流

防抖和节流严格算起来应该属于性能优化的知识,但实际上遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死。所以还是很有必要早点掌握的。(信我,你看完肯定就懂了)

在 Vue 中使用lodash对事件进行防抖和节流

有些浏览器事件可以在短时间内快速触发多次,比如调整窗口大小或向下滚动页面。例如,监听页面窗口滚动事件,并且用户持续快速地向下滚动页面,那么滚动事件可能在 3 秒内触发数千次,这可能会导致一些严重的性能问题

手写实现防抖&节流

解决当函数在某些场景下被无限制的频繁调用,会增加浏览器的负担,会造成卡顿的现象;鼠标滚动、键盘输入操作、窗口resize等等,事件持续触发时,如果间隔时间小于预设的时间,不会执行函数,同时以最后触发事件的时间为准重新计时。

Vue中的防抖

应用场景:多次点击提交按钮 首次提交执行,重复提交就会等待一定的时间提交执行;首次点击提交按钮会立即执行一次debounce方法,后面3s内不触发事件才能继续执行

抛开lodash,手写节流和防抖函数

面试的时候我们经常会问别人是理解什么是节流和防抖,严格的可能要求你写出节流和防抖函数,这里我们抛开loadsh工具库手写节流和防抖

函数防抖理解和仿写

函数防抖的理解:连续触发事件,最后一次事件触发后,超过了规定时间还没有再次触发,这时候会执行一次事件,这就是函数的防抖

js实现函数防抖与节流

防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。节流:规定在一个单位时间内,只能触发一次函数。

什么是防抖和节流,他们的应用场景是哪里?

防抖,顾名思义,防止抖动,以免把一次事件误认为多次,敲键盘就是一个每天都会接触到的防抖操作。想要了解一个概念,必先了解概念所应用的场景。在 JS 这个世界中,有哪些防抖的场景呢

Js中防抖与节流

防抖又叫为函数防抖(debounce):指触发事件后,在 n 秒内函数只能执行一次,如果触发事件后在 n 秒内又触发了事件,则会重新计算函数延执行时间。前端开发中,常见的事件如,onresize,scroll,mousemove ,mousehover

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!