美文网首页
JS防抖与节流

JS防抖与节流

作者: 苹果咏 | 来源:发表于2020-12-02 16:26 被阅读0次

防抖

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。等于就是动作操作完再执行回调。

典型应用场景:

手机号、邮箱验证输入检测,等用户输入完再进行检测
简单说就是一开始不会触发,停下来多长时间才会触发

function debounce(fn, delay) {
    let timer; // 维护一个 timer
    return function () {
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            fn.apply(this, arguments); // 用apply指向调用debounce的对象,相当于this.fn(arguments);
        }, delay)
    }
}

//测试用例,鼠标一直动不会触发函数,当鼠标停下来了,触发函数

function testDebounce(e, content) {
    console.log(e, content);
}
let testDebounceFn = debounce(testDebounce, 1000); // 防抖函数
document.onmousemove = function (e) {
    testDebounceFn(e, 'debounce'); // 给防抖函数传参
}



节流

每隔一段时间,只执行一次函数。

典型应用场景:

1、hover弹出的导航栏,一直快速频繁的去触发hover,就会导致导航栏一直上上下下弹出,这时就要用到节流函数,每隔一段时间,只执行一次函数。
2、高频点击提交,表单重复提交
简单来说就是,不管你鼠标无影手不停地去触发,他只会按照自己的delay时间去触发,也就是只会按自己的节奏去触发,包括第一次触发也是多少delay后才会触发。

function throttle(fn, delay) {
    let timer;
    return function () {
        if (timer) {
            return;
        }
        timer = setTimeout(() => {
            fn.apply(this, arguments);
            timer = null; // 在delay后执行完fn之后清空timer,此时timer为假,throttle触发可以进入计时器
        }, delay)
    }
}

//测试用例,鼠标移动触发,快速移动只按照delay的时间间隔触发
function testThrottle(e, content) {
    console.log(e, content);
}
let testThrottleFn = throttle(testThrottle, 1000); // 节流函数
document.onmousemove = function (e) {
    testThrottleFn(e, 'throttle'); // 给节流函数传参
}

相关文章

  • 函数节流与函数防抖

    函数节流与函数防抖的区别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/gshuwktx.html