★ 防抖、节流

  • what,how, why ?

防抖

  • 概念:控制次数 - 触发高频事件后 n 秒内函数只执行一次,如果 n 秒内高频事件再次触发则重新计算时间
  • 使用场景:
    • search 搜索功能,在不间断输入值的时候用防抖来节约请求资源
    • window 触发 resize 的时候会不间断的执行,用防抖来让其只触发一次
function debounce(fun, wait = 500) {
    let task = null

    return function() {
        if(task) clearTimeout(task)

        task = setTimeout(() => {
            fun.apply(this, [...arguments])
        }, wait)
    }
}

节流

  • 概念:控制频率 - 高频事件触发 n 秒内只执行一次
  • 使用场景:
    • 懒加载时要监听计算滚动条的位置
function throttle(fun, wait = 1000) {
    let lastTime = 0

    return function() {
        let nowTime = + new Date()

        if(nowTime - lastTime > wait) {
            lastTime = nowTime
            fun.apply(this,  [...arguments])
        }
    }
}
function throttle(fun, wait = 1000) {
    let canRun = true

    return function() {
        if(!canRun) return 

        canRun = false
        setTimeout(() => {
            fun.apply(this,  [...arguments])
            canRun = true
        }, wait)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容