防抖和节流

Posted jiujiaoyangkang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防抖和节流相关的知识,希望对你有一定的参考价值。

防抖:一定时间内频繁触发一个事件则不会执行对应的操作,只有大于这个时间再次触发才会执行 action

function _debounce(func, wait) {
    // 一上来就执行了,this 是 window
    let timer = null;
    let context, args;
    return function () {
        // 返回的函数 this 才是 oBox
        context = this;
        args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            func.apply(context, args);
        }, wait);
    }
}
let oBox = document.querySelector(‘#root‘);
oBox.onmousemove = _debounce(function () {
    console.log(1);
}, 500);

节流:一定时间间隔才执行对应的操作,无论你多么频繁的触发事件

// 函数节流
let canRun = true;
document.getElementById("root").onmousemove = function () {
    if (!canRun) {
        return;
    }

    // 马上设置 false,在 300ms 内触发事件会直接 return
    canRun = false;
    setTimeout(function () {
        console.log(2);
        // 300ms 后可以继续了
        canRun = true;
    }, 300);
};

 

以上是关于防抖和节流的主要内容,如果未能解决你的问题,请参考以下文章

lodash的防抖和节流方法

JS基础-防抖和节流

防抖和节流代码实现

防抖和节流代码实现

JS的防抖和节流

防抖和节流啥区别,实现一个防抖和节流