防抖节流理解

先明白一个概念,防抖和节流的区别

防抖:疯狂点击,在设定的这个时间段内只会发送最后一次点击要求

节流:定时器设置的,在设定的时间间隔内只执行一次,循环进行

对于防抖的简单函数编写

<button id="debounce">点我防抖!</button>

$('#debounce').on('click', function(){
    let timer;
    return function () {
        clearTimeout(timer);
        timer = setTimeout(() => {
            console.log("防抖成功!");
        }, 500);
    }
});

防抖运用的方面之一,页面滚动监听,方法如下

function debounce(fn,delay) {
    let timer = null;
    return function () {
        let self = this,
            args = arguments;
        timer && clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(self,args);
        },delay);
    }
}

window.onscroll = debounce(function () {
    let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    console.log('滚动条位置:' + scrollTop);
},200)

节流的简单函数编写

<button id="throttle">点我节流!</button>

$('#throttle').on('click', throttle());

function throttle(fn) {
    let flag = true;
  
    return function () {
        if (!flag) {
            return;
        }
        flag = false;
        //此处设置的是一秒执行一次操作
        setTimeout(() => {
            console.log("节流成功!");
            flag = true;
        }, 1000);
    };
}

节流一遍用于对输入框的请求,百度的搜索框在我们输入的时候就节流的操作

<input type="text" value="" id="input">

$('#input').on('keyup', throttle(function () {
    console.log($(this).val())
    
}, 1000));

function throttle(fn, delay) {
    let flag = true;
    return function () {
        let self = this,
            args = arguments;
        if (!flag) {
            return;
        }
        flag = false;
        setTimeout(() => {
            fn.apply(self, args);
            flag = true;
        }, delay);
    }
}

 

上一篇:java基础-Timer定时器类


下一篇:防抖与节流