JavaScript原生实现的节流和防抖

2021-06-08 18:03

阅读:634

标签:直接   java   过程   asc   回调函数   javascrip   art   回调   code   

1.防抖

  防抖:在高频触发下,在n秒内只触发一次(非严格)。如果n秒内再次触发,则重新计时

//实现debounce
function debounce(fn){
    let timer = null                    //创建一个命名存放定时器返回值
    return function (){
        clearTimeout(timer)                //输入前先杀掉前一个定时
        timer = setTimeout(() => {        //创建一个新的
            fn.apply(this, arguments)    //时间到执行fn回调函数
        }, 500)
    }
}

2.节流

  节流:在高频触发下,在n秒内只触发一次(严格)。如果多次触发,则直接忽略,等待第一个触发完毕。

  //实现throttle
  function throttle(fn){
    let flag = true          //通过闭包保存一个标记
    return function (){
        if(!flag) return     //正在定时执行,直接返回
        flag = false         //没有定时在执行,添加定时执行
        setTimeout(() => {     //定时过程中flag一直为false,下一次触发直接被返回
            fn.apply(this, arguments)
            flag = true
        },2000)
    }
}

 

JavaScript原生实现的节流和防抖

标签:直接   java   过程   asc   回调函数   javascrip   art   回调   code   

原文地址:https://www.cnblogs.com/xiaoxu1024/p/14522819.html


评论


亲,登录后才可以留言!