JavaScript节流

节流

节流的解释:在触发任务的第一时间执行任务,并且设定定时器,如果在该定时器还未结束的时候还有触发任务的,也不执行

实现节流的核心是时间间隔,在设定的时间间隔内如果还有同样的任务进来,则不执行。

那么控制时间间隔的方法有两个,第一是setTimeout,第二是利用Date日期

// 用setTimeout时间间隔
function throttle(func,delay){
    let timer;
    return function () {
        let context = this;
        let args = arguments;
        if (timer){
            return;
        }
        timer = setTimeout(function (){
            func.apply(context,args)
            timer = null;
        },delay)
    }
}

以上利用了timer控制定时器,如果定时器被定义了,说明有任务正在执行,如果没有被定义说明可以执行任务。

// 用Date对象
function throttle1(func,delay){
    let pre = 0;
    return function () {
        let context = this;
        let args = arguments
        let now = new Date();
        if (now - pre > delay){
            func.apply(context,args);
            pre = now;
        }
    }
}

以上利用了日期的计算来控制时间,需要判断的是毫秒数的差,如果小于delay就是在执行时间内,不在就是执行完成。

posted @ 2022-03-20 15:10  kihyun  阅读(1143)  评论(0编辑  收藏  举报