Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Блокировка передачи управления в setInterval() (https://javascript.ru/forum/misc/3064-blokirovka-peredachi-upravleniya-v-setinterval.html)

Nicko 14.03.2009 12:44

Блокировка передачи управления в setInterval()
 
Пишу скриптик, толкнулся с проблемой..

Необходимо после вызова функции setInterval() передать управление не сразу, а только по окончании ее выполнения (после вызова clearInerval())..

Подскажите: каким образом можно заблокировать передачу управления??

Вот кусок исходного кода:

Hen = function(game,i) {
  this.name = "Hen #"+i;
  this.i = i;
  this.game = game;
  this.div = null;

  this.timer = -1;
  this.coef = 0;
  this.from = 0;
  this.counter = 0;
}
Hen.prototype = {
  remove: function() {
    var self = this;

    self.animateRemoving();
    self.game.board.removeChild(self.div)
  },
  animateRemoving: function() {
    var self = this;

    self.counter = 0;
    self.coef = 0;
    if (self.timer == -1) {
      self.from = 0;
      self.to = 100;
      self.timer = window.setInterval(function() {self.animate(1)},delay);
    }
  },
  animate: function(k) {
    var self = this;

    self.coef += 0.1;
    self.counter += Math.round(self.coef);
    if (self.counter > 100) {
      self.counter = 100;
      window.clearInterval(self.timer);
      self.timer = -1;
    }
    $style(self.div, {opacity: (self.from + k*self.counter)/100});
  }
}

Gvozd 14.03.2009 12:53

что-то я нифига не понял что вы хотите.
но, в вашем коде есть ошибка(как минимум одна)
переменная delay нигде не определена, но используется.
именна эта переменная ответственнена за время задержки выполнения

Андрей Параничев 14.03.2009 15:09

Вы хотите сделать "синхронный" интервал?

Kolyaj 14.03.2009 21:13

Передавайте функции callback, который вызывайте после уничтожения интервала.

Nicko 15.03.2009 10:49

TO: Gvozd
 
Вложений: 1
Цитата:

Сообщение от Gvozd (Сообщение 14278)
что-то я нифига не понял что вы хотите.
но, в вашем коде есть ошибка(как минимум одна)
переменная delay нигде не определена, но используется.
именна эта переменная ответственнена за время задержки выполнения

Я выложил только КУСОК кода, все необходимые переменные и функции определены.

Цель - реализация некого абстрактного метода blockWorking(), который заблокировал бы выполнение скрипта на время выполнения setInterval() и передать управление далее только после вызова clearInterval()

Если не затруднит, можете глянуть исходник: hens_vs_foxes_v01/js/hens.js line 43. Заранее благодарен :thanks:


Часовой пояс GMT +3, время: 16:12.