节流

103 阅读1分钟

一、场景

统计用户滚动屏幕的行为来做出相应的网页反应, 需要节流了,因为如果用户不断的进行滚动,就会不断的产生请求,相应也会增加,容易导致网络的阻塞,那么我们就可以在用户出发事件的时候就马上执行任务,然后设定时间间隔,在这段时间内,不管用户如何滚动都忽视操作,在时间到了以后,如果监测到用户有滚动行为,再次执行任务并设置时间间隔。

image.png

二、代码实现

function coloring () {
    let r = Math.floor(Math.random() * 255);
    let g = Math.floor(Math.random() * 255);
    let b = Math.floor(Math.random() * 255);
    document.body.style.background = `rgb(${r}, ${g}, ${b})`
}

function throttle (func,delay) {
    let timer;
    return function (){
        let context = this;
        let args = arguements;
        // 判断触发事件是否在时间间隔内,如果在时间间隔内,我们就不触发事件,如果不在时间间隔内我们就触发事件,也就是说,如果timer被赋值了,也就是任务还在等待执行暂时不改变timer的值,如果timer没有被赋值,那就给他执行任务就好了
        if(timer){
            return;
        }
        timer = setTimeout(function(){
            fun.apply(this, args);
            timer = null;
        },delay)
    
    }

}

window.addEventListener('resize', throttle(coloring, 2000));