JS的去抖、节流

去抖(debounce)

  在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

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

表现:

 

节流(throttle)

  规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

function throttle(fn, delay) {
    let last_time = Date.now() - delay;
    return function() {
        let now = Date.now();
        if (now - last_time < delay) {
            return;
        }
        last_time = now;
        fn.apply(this, arguments)
    }
}

表现:

 

区别:

  去抖和节流十分相似,不一样的是,如果短时间内不断触发:
    去抖:停止触发时才去执行

    节流:只要过了delay,就会执行过了delay后的第一次触发

 

posted @ 2019-08-18 21:55  张啊咩  阅读(205)  评论(0编辑  收藏  举报