2013-05-23 4 views
2

Я не уверен, почему интервал не зацикливается. Я точно следил за учебниками, но не удался. Предложения?Loop setInterval function

$(document).ready(function(){ 
    setInterval(function() { 
    $('.current').removeClass('current').next().addClass('current'); 
    }, 2000); 
}); 

Обновлено: http://jsfiddle.net/pa7aU/3/

+3

Когда он получает до последнего элемента, нет '.next()', поэтому ему нечего добавить в класс. – Barmar

+0

что вы пытаетесь достичь? – lante

ответ

2

Одним из возможных некрасиво решение:

setInterval(function() { 
    var $current = $(".current").removeClass("current"), 
     $next = $current.next(); 

    if ($next.length) 
     $next.addClass("current"); 
    else 
     $current.siblings(":first").addClass("current"); 
}, 2000); 

DEMO:http://jsfiddle.net/pa7aU/4/

0

Когда вы дойдете до последнего элемента, вам нужно вернуться к начало, не использовать .next().

$(document).ready(function() { 
    setInterval(function() { 
     var next = $('.current').removeClass('current').next(); 
     if (next.length == 0) { 
      next = $("li:first"); 
     } 
     next.addClass('current'); 
    }, 2000); 
}); 

FIDDLE

+0

Спасибо! Это сработало отлично! Я знал, что должен был сделать, но не смог его кодировать. – rbattle

2
$(document).ready(function() { 
    var $li = $('ul li'), i = 0, l = $li.length; 
    setInterval(function() { 
     $li.removeClass('current').eq(i % l).addClass('current'); 
     i++; 
    }, 2000); 
}); 

http://jsfiddle.net/chg4J/

0

Когда вы в последний li, next() оленья кожа идти к первому.

легко исправить, чтобы добавить, что после того, как:

if($('.current').length <= 0) $('li:first').addClass('current'); 

Fiddle: http://jsfiddle.net/pa7aU/5/

0

Просто, чтобы добавить что-то новое в смеси:

$(document).ready(function() { 
    setInterval(function() { 
     $('li').eq(($('.current').removeClass('current').index() + 1) % $('li').size()).addClass('current'); 
    }, 200); 
});