函数的防抖和节流

为了避免在类似scroll,mousemove,resize等持续触发的事件中频繁的执行函数,出于优化性能的目的,使连续触发事件在 n 秒中只执行一次函数

1、防抖debounce(多次执行只执行最后一次)

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时

应用场景:

  • 给按钮加函数防抖防止表单多次提交。
  • 对于输入框连续输入进行AJAX验证时,用函数防抖能有效减少请求次数。
  • 判断scroll是否滑到底部,滚动事件+函数防抖
    var debounce = function(fn,delay){
        var timer = null
        return function(){
            //清除上一次的定时器
            clearTimeout(timer)
            // 重新计时
            timer = setTimeout(function(){
                fn.apply(this)
            },delay)
        }
        
    }

2、节流throttle(每隔一段时间执行一次)

规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

应用场景:

  • DOM元素拖拽(mousemove)
  • Canvas绘画
    //节流
    var thottle = function(fn,delay){
        var lastTime = 0
        return function(){
            var nowTime = Date.now()
            if(nowTime-lastTime>=delay){
                fn.call(this)
                lastTime = nowTime
            }
        }
    }
    //通过setTimeout实现
    var throttle2 = function(func, delay) {            
        var timer = null;            
        return function() {                
            var context = this;               
            var args = arguments;                
            if (!timer) {                    
                timer = setTimeout(function() {                        
                    func.apply(context, args);                        
                    timer = null;                    
                }, delay);                
            }            
        }        
    }
    document.onscroll = thottle(function(){console.log(111)},200)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义 在JS里,有一些事件是很容易频繁触发的,比如窗口的resize、scroll、鼠标的onmousemove等...
    瑞哦利阅读 2,463评论 0 0
  • 概念 所谓函数的防抖和函数的节流,是一种优化程序性能的技术。主要应用于事件处理程序中 什么情况下需要使用防抖和节流...
    小呆呆008阅读 1,436评论 0 0
  • 首先我们要先了解下定时器 浏览器中的定时器有两种:设置一个定时器,规定在等待时间之后执行某个方法 setTimeo...
    chan7788阅读 1,599评论 0 1
  • 李桂芳初十五坚持分享第148天 2019年7月7 约练挑战第三周,今天约练了两次。更多的还是自己的感受。对于大家所...
    甜乐_ed8c阅读 864评论 0 1
  • 究竟为何事所惊扰,三翻四次莫名奇妙的悲愤。生活琐事乱麻如丝,却不可一刀斩灭。总是随时都有那么一星半点残余未...
    哈喽1234阅读 1,813评论 0 1