2012-02-17 7 views
0

私は3つのdivを(CSSクラスを使用して)1つお互いに強調したいと思っています。その後、ループが再開し、同じことをする必要があります。しかし、それは動作していません。ここでJquery無限ループが動作しません

これは明白なものでなければならないフィドルhttp://jsfiddle.net/gamito/6M65S/

だ...

<script> 
$('.ticker').each(function(i) { 
var elem = $(this); 
var prev = $(this).prev(); 
setTimeout(function() { 
    elem.addClass("selected"); 
    prev.removeClass("selected"); 
}, i * 2000); 
});​ 
</script> 
+0

は、私はあなたが思います代わりに 'setInterval'を使用します。プラス私は論理が何かを欠けていると思う。それが終わりに達するとどのように分かりますか?なぜ 'each()'を使うのですか? – elclanrs

答えて

0

何かを、ここでは合理化されたバージョンです:

// Setup an interval timer 
setInterval(function() { 
    var next = $('.ticker.selected').removeClass('selected').next('.ticker').addClass('selected'); 
    if(!next.length) { 
     $('.ticker:first').addClass('selected'); 
    } 
}, 2000); 
// Initialize the selected class 
$('.ticker:first').addClass('selected'); 
1

はあなたのコードを作り直しました。新しいフィドルhere

基本的には、考え方を変えたいと思っています。間隔を設定し、間隔で変更します。setTimeoutのオフセットではありません。そうでない場合は、setTimeoutsetIntervalを入れて、それらが均等に配置されていることを確認する必要があります。

新しいコード:

// Setup an interval timer 
setInterval(function() { 
    // Get currently selected element 
    var select = $('.ticker.selected'); 
    // Remove the class 
    select.removeClass('selected'); 
    if(select.next('.ticker').length > 0) { 
     // If we have more to go, select the next one 
     select.next().addClass('selected'); 
    } else { 
     // Otherwise restart 
     $('.ticker').eq(0).addClass('selected'); 
    } 
}, 2000); 
// Initialize the selected class 
$('.ticker').eq(0).addClass('selected'); 
1

あなたKtashの回答に基づいてのように、http://jsfiddle.net/6M65S/13/

var play = function(){ 
    var $ticker = $('.ticker'), 
     $curTicker = $('.ticker').filter('.selected'); 
    $ticker.removeClass('selected'); 
    if(!$curTicker.is(':last')) { 
     $curTicker.next().addClass('selected'); 
    } else { 
     $ticker.first().addClass('selected'); 
    } 
}; 
setInterval(play, 1000); 
関連する問題