Тротлинг в js

Давайте создадим простую функцию тротлинга и разберем как мы можем ее вызывать.


const throttle = (func, timeout) => {
    let isTimeout = false;

    return function () {
        if (isTimeout) {
            return;
        }

        isTimeout = true;

        setTimeout(function () {
            isTimeout = false;
            return func();
        }, timeout);
    }
}

1 способ вызова

Функция-обработчик скролла создается вызовом throttle и возвращается из нее. т.е. сама функция throttle вызывается 1 раз.


document.addEventListener('scroll', throttle(function(){
    console.log(1);
}, 1000));

2 способ вызова

Мы заранее создаем затротленную функцию throttledFunction . а потом ее будем вызывать каждый раз при скролле.


const throttledFunction = throttle(function () {
    console.log(1);
}, 1000);
document.addEventListener('scroll', (e) => {
    throttledFunction();
});

Более полная функция тротлинга

С принудительным остановкой setTitmeout.


function throttle(func, timeout) {
    let isTimer = false;

    return function() {
        if (isTimer) {
            return;
        }
        const timer = setTimeout(() => {
            func();
            isTimer = false;
            clearTimeout(timer);

        }, timeout);
        isTimer = true;
    }
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *