Как применить несколько раз к циклам setInterval - PullRequest
0 голосов
/ 10 февраля 2011

Всего новичков здесь. У меня есть скрипт, который использует setInterval для фильтрации по списку и добавляет / удаляет класс каждые 2 секунды для каждого элемента списка.

Как мне отредактировать этот скрипт, чтобы я мог применять разное время для каждого цикла setInterval?

Например: для первого элемента списка я хочу, чтобы setInterval (или задержка) составляла 3 секунды, для второго элемента списка - 1,5 секунды, и так далее до тех пор, пока список не будет завершен. .. Мне нужно, чтобы каждый цикл был рассчитан по-разному. Как это сделать? Ваша помощь очень ценится.

$(function() {
var $list = $('#animation li');
    $list.filter(':first').addClass('go');

    setInterval(function() {
      if( $list.filter('.go').index() !== $list.length - 1 ) {
      $list.filter('.go').removeClass('go').next().addClass('go');
      }
    else {
      $list.removeClass('go').filter(':first').addClass('go');
      }
   }, 2000);

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Очень примитивный пример, но просто показывающий методологию:

var $list = $('#animation li');
var worker = function(){
  //
  // perform your process(es)
  //

  // only continue on if necessary
  if (continue_working)
    timer = setTimeout(worker, Math.random() * 5 * 1000);
}
var timer = setTimeout(worker, 2000);

// to stop at any time
clearTimeout(timer);
0 голосов
/ 10 февраля 2011

вызов setInterval в пределах setInterval.

var intervalFunc = new function(){
    if( $list.filter('.go').index() !== $list.length - 1 ) {
  $list.filter('.go').removeClass('go').next().addClass('go');
  }
else {
  $list.removeClass('go').filter(':first').addClass('go');
  }
  // Calculate the next time func
  var timeout = ...
  setInterval(intervalFunc, timeout);
}

setInterval(intervalFunc, 2000);
...