Подтвердить что ты не робот

Force setTimeout будет запускать свою полезную нагрузку раньше, чем первоначально установлен

Я разработал небольшое программное обеспечение для презентации, состоящее из слайдов и активов для каждого слайда. Когда слайд отображается, все его активы зацикливаются и отображаются после задержки с использованием метода setTimeout. выглядит сладким...

Yaaay!, требования изменились, теперь требуется, чтобы презентация выполнялась как слайд-шоу PowerPoint, событие щелчка мыши приведет к немедленному отображению следующего объекта на странице.

Мой вопрос: существует ли способ немедленно отключить мой тайм-аут? Я могу получить и хранить в стеке тайм-аут, поскольку он возвращается, когда тайм-аут создается. Единственным другим вариантом было бы отменить тайм-аут, а затем воссоздать элемент, который намного больше обрабатывается, и я хочу сделать это, и я не чувствую, что слишком много рефакторинга моего кода.

Любые идеи?

4b9b3361

Ответ 1

Короткий ответ №. Вы не можете делать то, что вы просите, если вы не сохраните список методов, которые нужно уволить. Затем вы можете отменить таймер и вызвать соответствующий метод.

Ответ 2

Если вы установите таймер следующим образом:

var timer1 = window.setTimeout(mainFunction,500)

вызовите его, выполнив следующее:

window.clearTimeout(timer1)
mainFunction()

Ключ состоит в том, чтобы отделить функцию от таймера.

Ответ 3

Вы можете обернуть его в закрытие следующим образом:

function createTimeout(timeoutHandler, delay) {
    var timeoutId;
    timeoutId = setTimeout(timeoutHandler, delay);
    return {
        clear: function() {
            clearTimeout(timeoutId);
        },
        trigger: function() {
            clearTimeout(timeoutId);
            return timeoutHandler();
        }
    };
}

var a = new Date();

var timeout = createTimeout(function() { console.log(a); }, 1000);
// timeout.clear();
timeout.trigger();