防抖 节流

防抖

  • 前面所有的触发都被取消,最后一次执行在规定时间之后才会触发,也就是说如果连续快速的触发,只会执行一次

  • 用户操作频繁,但只执行一次

    function debounce(fn,delay){
        let timer = null 
        return function() {
            if(timer){
              // 当前已经开启了一个定时器,关闭它,重新开启一个新的定时器  
                clearTimeout(timer) 
                timer = setTimeout(fn,delay) 
            }else{
                timer = setTimeout(fn,delay)
            }
        }
    }
    

节流

  • 在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发

  • 用户操作频繁,将频繁的操作变为少量的操作

    function throttle(fn,delay){
        let valid = true
        return function() {
           if(!valid){
               // 当前已经执行的函数还没执行完成,禁止再次执行
               return false 
           }
           // 在指定时间内执行函数一次
            valid = false
            setTimeout(() => {
                fn()
                // 函数执行完成,放行,可以执行下一次操作了
                valid = true;
            }, delay)
        }
    }
    
posted @   夏雨下雨夏  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示