资讯专栏INFORMATION COLUMN

js中函数节流&函数去抖

王军 / 2782人阅读

摘要:节流保证在一定时间内,只能触发一次。我们在尝试一下去抖消抖,消除抖动,感觉这个更好听有没有什么现成的上的一次发现源码的经历以及对学术界拿来主义的思考函数节流和函数去抖应用场景辨析函数去抖的实现

开篇先提几个问题?

1.做搜索框的时候你使用什么事件?change?blur?keyup?你想要的效果是什么?
2.scroll事件怎么就触发?是滚一段距离触发一次?还是滚一圈触发一次?还是滚一次触发一次?你想要那种?
3.mouseover事件是怎么触发呢?

带着我们的问题我们研究一下 throttle & debounce 是什么意思。

1.throttle节流,scroll和mouseover亦或者其他方式,每次移动都会触发代码效果,但是这些效果太密集了,占用了系统资源,计算机的计算能力是有限的,我们写的代码应该尽可能的优雅。
2.debounce去抖,本意是从 按键去抖 过来的,让我们的用户正确的操作之后才去执行代码,且只会执行一次,比如当我们做文本输入的时候,如果用keyup我们不是去节流,而是去判断用户停止了输入。
3.节流保证在一定时间内,只能触发一次。如果我们只要触发一次,这就是去抖。代码上来看差距不是很大。

好了接下里我们来自己写一个,尝试一番
//先来个有问题的代码
window.onscroll=function(){
    console.log(new Date());
}


看控制台的输出。知道这个有多么的恐怖了吧。

//我们先来个节流,每秒输出一次
window.onscroll=function(){
    if(window.onScrollTag == undefined){
        window.onScrollTag=true;
        console.log(new Date());
        setTimeout(function(){
            window.onScrollTag=undefined;
        },1000);
    }
}//先触发
window.onscroll=function(){
    if(window.onScrollTag == undefined){
        window.onScrollTag=setTimeout(function(){
            window.onScrollTag=undefined;
             console.log(new Date());
        },1000);
       
    }
}//后触发
//从上面的代码可以看出来,我们在一个事件执行的时候就把标记改成不可用。一秒后才可以再次触发操作。
//我们在尝试一下去抖
window.onscroll=function(){
    if(window.onScrollTag != undefined){
        clearTimeout(window.onScrollTag);
    }
    window.onScrollTag=setTimeout(function(){
         console.log(new Date());
    },1000);
}//消抖,消除抖动,感觉这个更好听
有没有什么现成的?

underscore,github上的
一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考
JavaScript 函数节流和函数去抖应用场景辨析
underscore 函数去抖的实现

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91109.html

相关文章

  • JS函数去抖节流

    摘要:上段代码的一个问题是,事件会在定时器结束后被触发,因此会出现一定的延迟,如果想让事件被立即触发,可以使用以下的去抖函数但是,对于去抖来说,在某些场景下是不合适的,因此我们可以使用节流。 参考文章游戏星人眼中的节流与去抖(很生动) 函数去抖与节流 Debounce:函数去抖就是对于一定时间段的连续的函数调用,只让其执行一次Throttle:函数节流就是让连续执行的函数,变成固定时间段间断...

    fuchenxuan 评论0 收藏0
  • JS专题之节流函数

    摘要:一什么是节流节流函数就是让事件处理函数在大于等于执行周期时才能执行,周期之内不执行,即事件一直被触发,那么事件将会按每小段固定时间一次的频率执行。我们通过一个简单的示意来理解节流函数可以用时间戳和定时器两种方式进行处理。 本文共 2000 字,读完只需 8 分钟 上一篇文章讲了去抖函数,然后这一篇讲同样为了优化性能,降低事件处理频率的节流函数。 一、什么是节流? 节流函数(thrott...

    huaixiaoz 评论0 收藏0
  • JS专题之去抖函数

    摘要:如果本次定时器没有被清除,时间到后就会自然执行事件处理函数。绑定去抖后的事件回调函数绑定回调函数的属性方法,点击页面,重置去抖效果异步请求清空上一次事件触发的定时器重置为从而下一次事件触发就能立即执行。 一、前言 为什么会有去抖和节流这类工具函数? 在用户和前端页面的交互过程中,很多操作的触发频率非常高,比如鼠标移动 mousemove 事件, 滚动条滑动 scroll 事件, 输...

    ivydom 评论0 收藏0
  • JavaScript 函数节流函数去抖应用场景辨析

    摘要:函数节流和去抖的出现场景,一般都伴随着客户端的事件监听。函数节流的核心是,让一个函数不要执行得太频繁,减少一些过快的调用来节流。 概述 也是好久没更新 源码解读,看着房价蹭蹭暴涨,心里也是五味杂陈,对未来充满恐惧和迷茫 ...(敢问一句你们上岸了吗) 言归正传,今天要介绍的是 underscore 中两个重要的方法,函数节流和函数去抖。这篇文章不会涉及具体的代码实现(关于代码实现请期...

    ZHAO_ 评论0 收藏0

发表评论

0条评论

王军

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<