函数防抖和函数节流

在网页开发中,onmousemove,onkeydown,onscroll,onresize 等事件会频繁的触发绑定函数。为了优化性能,我们会用到函数防抖和函数节流。

  • 函数防抖
function debounce(fn){
    var timer = null;
    return function(){
        clearTimeout(timer)
        timer = setTimeout(function(){
            fn();
        },500)
    }
}
function log(){
    console.log(1);
}
document.onmousemove = debounce(log)

函数防抖,当鼠标移动的时候,不会频繁的触发log方法。而是延迟500毫秒之后,再触发log方法。如果这500毫秒中又来了一次鼠标事件,则直接清除前面的延时任务,重新记时。如果鼠标一直不停的移动,则只有最后一次的鼠标事件会触发log方法。

  • 函数节流
function throttle(fn){
    var start = new Date(); 
    var timer = null;
    return function(){
        var now = new Date();
        clearTimeout(timer);
        if(now - start > 2000){
            fn();
            start = now;
        }else{
            timer = setTimeout(function(){
                fn();
            },500);
        }
    }
}
function log(){
    console.log(1);
}
document.onmousemove = throttle(log)

函数节流,和上诉函数防抖的区别在于,当鼠标不停的移动的时候,不会只执行一次log方法。而是每隔2秒就会执行一次log方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,538评论 1 11
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 484评论 0 0
  • 最近在研究页面渲染及web动画的性能问题,以及拜读《CSS SECRET》(CSS揭秘)这本大作。 本文主要想谈谈...
    诺奕阅读 1,138评论 0 11
  • 有人说,月亮不只一个,不同的月亮有不同的性格和气味。我明白每个人看到的月亮都会有自己的印记,李白和苏轼的月亮蕴含着...
    花如许阅读 874评论 0 1
  • 我看到了自己的问题,可是就是不愿意去改变,或者说做不到改变的第一步,拉不下虚伪的面具。就好像前段时间和朋友闹...
    byseam阅读 155评论 1 0