美文网首页
js防抖与节流

js防抖与节流

作者: Tme_2439 | 来源:发表于2020-05-21 14:14 被阅读0次

简单理解一下

防抖:在一定时间内,如果事件一直触发(一定时间内)间断的话,只执行最后一次

// debounce
let debounce = (fn, delay, immediate = false) => {
    let timer = null
    return () => {
        if(immediate) { // immediate为true表示立即执行一次,后面的再防抖
              fn()
              immediate = false
        }else {
                if(timer) clearTimeout(timer) // 清除上一个
                timer = setTimeout(() => { // 生成新的
                    fn()
                }, delay)        
        }
    }
}
undefined
let fn = () => {
    console.log(666)
}

window.addEventListener('scroll', debounce(fn, 1000))

============================================

节流:如果事件一直触发的话,则间隔一定时间(delay)就执行一次

方案一:时间戳版本

原理: prev为上一次执行时间,如果当前时间减去上一次执行时间大于设置的延时时间就可以触发fn了

let throttle = (fn, delay) => {
    let prev = Date.now()
    return () => {
        let now = + new Date()
        if(now - prev > delay){ // prev为上一次执行时间,如果当前时间减去上一次执行时间大于设置的延时时间就可以触发fn了
            fn()
            prev = Date.now() // 重新指定本次调用时间
        }
    }
}

// 需要多次节流的函数
function fn(){console.log(666)}

window.addEventListener('scroll', throttle(fn, 1000)) // 调用一次,并使用闭包保留了prev

方案二:定时器版本

原理:判断有没有定时器在跑,没有则跑一个

let throttle = (fn, delay) => {
    let timer = null
    return () => {
        if(!timer){ // 2.不断地触发,如果timer为null 则注册一个定时器并给timer赋值
            timer = setTimeout(() => {
                fn()
                timer = null  // 1.本次执行完成timer置为空
            }, delay)
        }

    }
}

let fn = () => {
    console.log(666)
}

window.addEventListener('scroll', throttle(fn, 1000))

相关文章

  • 函数节流与函数防抖

    函数节流与函数防抖的区别JS魔法堂:函数节流(throttle)与函数去抖(debounce)函数的防抖与节流 自...

  • 前端性能优化-浅谈js防抖和节流

    浅谈js防抖和节流

  • 防抖和节流

    一、防抖:只执行最后一次 js防抖方法 一、节流:控制执行次数 节流

  • JavaScript:函数防抖与节流

    什么是函数防抖与节流? 函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段。 定义: 防抖: n 秒后在...

  • 微信小程序防抖、节流的使用

    1、防抖、节流函数的封装 在utils文件夹下新建utils.js文件,然后写入节流和防抖函数 在.js页面引入并使用:

  • js函数的防抖(debounce)与节流(throttle)

    js 函数的防抖(debounce)与节流(throttle)[https://www.cnblogs.com/c...

  • js的防抖和节流

    js的 防抖(debounce)和 节流(throttle ) 防抖和节流一般用于高频触发事件,属于浏览器性能优化...

  • JS 节流与防抖

    本文的主角是节流 throttle 与防抖 debounce。 区别节流强调的是m秒内函数最多触发一次,注意这里的...

  • js防抖与节流

    在前端开发中会遇到一些频繁的事件触发,例如input,keyup,keydown,scroll,resize,mo...

  • js防抖与节流

    1.节流(throttle) 定义:先定义个执行周期,当时间执行时间大于等于执行周期,那就进入新的周期;如果小于执...

网友评论

      本文标题:js防抖与节流

      本文链接:https://www.haomeiwen.com/subject/havzohtx.html