JavaScript原生实现的节流和防抖

时间:2021-03-15 10:29:33   收藏:0   阅读:0

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)
    }
}

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!