Ответ 1
Короткий ответ №. Вы не можете делать то, что вы просите, если вы не сохраните список методов, которые нужно уволить. Затем вы можете отменить таймер и вызвать соответствующий метод.
Я разработал небольшое программное обеспечение для презентации, состоящее из слайдов и активов для каждого слайда. Когда слайд отображается, все его активы зацикливаются и отображаются после задержки с использованием метода setTimeout
. выглядит сладким...
Yaaay!, требования изменились, теперь требуется, чтобы презентация выполнялась как слайд-шоу PowerPoint, событие щелчка мыши приведет к немедленному отображению следующего объекта на странице.
Мой вопрос: существует ли способ немедленно отключить мой тайм-аут? Я могу получить и хранить в стеке тайм-аут, поскольку он возвращается, когда тайм-аут создается. Единственным другим вариантом было бы отменить тайм-аут, а затем воссоздать элемент, который намного больше обрабатывается, и я хочу сделать это, и я не чувствую, что слишком много рефакторинга моего кода.
Любые идеи?
Короткий ответ №. Вы не можете делать то, что вы просите, если вы не сохраните список методов, которые нужно уволить. Затем вы можете отменить таймер и вызвать соответствующий метод.
Если вы установите таймер следующим образом:
var timer1 = window.setTimeout(mainFunction,500)
вызовите его, выполнив следующее:
window.clearTimeout(timer1)
mainFunction()
Ключ состоит в том, чтобы отделить функцию от таймера.
Вы можете обернуть его в закрытие следующим образом:
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();