У меня есть некоторое функциональное TAHT, периодически вызывающая сторона:
var func = function() {
alert('Hello world!');
};
func.periodical(5000);
Эта функция также вызвана с click
событие:
$('element').addEvent('click', function(){
func();
});
Таймер запускает и считает 2 500 мс, затем я нажимаю $('element')
, func()
выполняется и я хочу прямо сейчас сбросить таймер это func()
не будет назван в следующие 2 500 мс, но в следующие 5 000 мс.
Как сделать это?
Вы можете удалить периодический интервал и установить его снова при щелчке по элементу. Чтобы не носить с собой лишнюю переменную, вы можете сохранить ссылку на таймер в самом объекте функции.
func.timer = func.periodical(5000);
$('element').addEvent('click', function() {
func();
$clear(func.timer);
func.timer = func.periodical(5000);
});
Я думаю, что проще всего было бы сделать так, чтобы функция возвращалась, если она обнаружит, что с момента ее последнего запуска прошло менее 5000 миллисекунд.
var func = (function() {
var ts = new Date();
return function(force) {
var now = new Date();
if (!force && now - ts < 5000)
return;
alert("Hi!");
ts = now;
};
})();
func.periodical(5000);
$('element').addEvent('click', function() {
func(true);
});
В обработчике событий функция вызывается с параметром, который заставляет ее игнорировать таймер. Этот механизм, конечно, немного хрупок.