изменить содержимое промежутка, а затем ждать - PullRequest
0 голосов
/ 18 января 2012

Моя проблема: у меня есть JSON Array, содержащий массивы, которые я отображаю в теге body, чтобы он выглядел так:

<body data-flashes="[["message","Welcome"],["error","This is working!"],["",""]]">

я хочу сделать следующее:

  1. перейти каждый элемент во внешнем массиве
  2. первый элемент во внутреннем массиве станет именем класса диапазона
  3. второй элемент во внутреннем массиве станет текстом в диапазоне
  4. анимация пролета
  5. подождать 10 секунд
  6. начать заново

(это всегда один и тот же промежуток) моя попытка:

window.pause = ( ms ) -> (
    date = new Date()
    currentDate = null

    loop
        currentDate = new Date()
        break unless currentDate-date < ms
)
window.showFlashes = () -> (
    $.each( window.$('body').data('flashes'), () -> (
            window.$('#flash_container').attr( 'class', this[0] )
            window.$('#flash_container').text( this[1] )
            window.$('#flash_container').effect( 'pulsate' )

            alert this

            pause( 10000 )
        )
    )
)

это coffeescript, который переводит рельсы в следующий javascript-файл:

(function() {

  window.pause = function(ms) {
    var currentDate, date, _results;
    date = new Date();
    currentDate = null;
    _results = [];
    while (true) {
      currentDate = new Date();
      if (!(currentDate - date < ms)) {
        break;
      } else {
        _results.push(void 0);
      }
    }
    return _results;
  };

  window.showFlashes = function() {
    return $.each(window.$('body').data('flashes'), function() {
      window.$('#flash_container').attr('class', this[0]);
      window.$('#flash_container').text(this[1]);
      window.$('#flash_container').effect('pulsate');
      alert(this);
      return pause(10000);
    });
  };

  window.exit_after = function(ms) {
    var _results;
    setTimeout("return 0", ms);
    _results = [];
    while (true) {
      _results.push(ms = 1);
    }
    return _results;
  };

}).call(this);

Теперь "реальная" проблема: пока у меня есть alert this в коде, он работает нормально (кроме того, что анимация не работает). но когда я удаляю его, код перестает работать.

и моя вторая проблема: есть ли способ обойти функцию pause? Я бы предпочел использовать setTimeout(), но я не знаю, как ...

1 Ответ

0 голосов
/ 18 января 2012

setTimeout () является решением всего этого.

Требуется два аргумента, первый из которых является строкой, которую нужно выполнить, а второй - задержкой в ​​миллисекундах.

Чтобы облегчить это, я бы обернул ваш блок кода в функцию, а затем вызвал бы эту функцию с помощью setTimeout ().Например:

function do_stuff()
{
...
}

setTimeout("do_stuff()",10000);

Это будет означать, что do_stuff () будет вызываться через 10 секунд.

Надеюсь, это поможет.

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