Skip to the content.

节流函数

由此我们尝试下面的程序:

基础实现

function throttle(func, t) {
    let timer = null;
    return function () {
        if (!timer) {
            timer = setTimeout(() => {
                timer = null;
            }, t);
            func();
        }
    };
}

我们写个例子来测试它的效果:

        let count = 1;
        const container = document.getElementById('container');
        function getUserAction() {
            container.innerHTML = count++;
        };
        container.onmousemove = throttle(getUserAction, 1000);

throttle效果

立即执行

有了防抖函数的经验,我们很容易依葫芦画瓢写出节流的立即执行:

function throttle(func, t) {
    let timer = null;
    return function () {
        if (!timer) {
            + func();
            timer = setTimeout(() => {
                timer = null;
            }, t);
            - func();
        }
    };
}

简单通过移动func执行的位置即可。

其实立即执行应该更合理,我们可以默认开启立即执行,

返回首页