Mootools периодическая функция и перемотка времени - PullRequest
1 голос
/ 07 июня 2010

У меня есть функция, вызывающая периодически:

var func = function() {
    alert('Hello world!');
};
func.periodical(5000);

Эта функция также вызывается с событием click:

$('element').addEvent('click', function(){
    func();
});

Таймер запускается и отсчитывает 2500 мсек, затем янажмите $('element'), func(), и я хочу прямо сейчас сбросить таймер, который func() будет вызываться не через следующие 2500 мс, а через 5000 мс.

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Вы можете удалить периодический интервал и установить его снова при нажатии на элемент. Чтобы избежать переноса дополнительной переменной, вы можете сохранить ссылку на таймер в самом объекте функции.

func.timer = func.periodical(5000);

$('element').addEvent('click', function() {
    func();
    $clear(func.timer);
    func.timer = func.periodical(5000);
});
0 голосов
/ 07 июня 2010

Я думаю, что самое простое, что нужно сделать, это вернуть функцию, если она обнаружит, что прошло менее 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);
});

В обработчике событий функция вызывается с параметром, который заставляет ее игнорировать таймер. Этот механизм, конечно, немного хрупок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...