2011-02-10 13 views
0

ここでは合計初心者です。私はsetIntervalを使ってリストをフィルタリングし、各リスト項目に2秒ごとにクラスを追加/削除するスクリプトを持っています。setIntervalループに複数回適用する方法

setIntervalループごとに異なる時刻を適用できるように、このスクリプトを編集するにはどうすればよいですか?

たとえば、最初のリスト項目では、setInterval(または遅延)を3秒にし、2番目のリスト項目を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); 
+0

これはあなたの5番目の要素によって、あなたは第二の0.09thのための間隔を設定することがありますことを意味しています。崩壊間隔を持つ目的は何ですか?あなたは本当に速いイベントのオーバーフローで終わるつもりです。 – Joe

+0

数学は3秒で始まり、関数が無限に連続的に発射されるまでに6秒かかります。 [Wolframで計算された](http://www.wolframalpha.com/input/?i=sum&a=*C.sum-_*Calculator.dflt-&f2=6/2^k&f=Sum.sumfunction_6/2^k&f3= 1&f = Sum.sumlowerlimit_1&f4 =無限大&f = Sum.sumupperlimit_infinity&a = * FVarOpt.1 -_ ** - *** Sum.sumvariable ---。* - ) – Joe

答えて

0

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); 
+0

あなたは 'setTimeout'を正しく意味していますか? –

+0

こんにちは私はここでは完全な初心者です。私はsetTimeoutが行く方法だと思う、私はわからない。リスト項目にクラスを追加し、あらかじめ決められた時間が過ぎるとそのクラスを削除するjqueryスクリプトが必要です。それは、異なる時間遅延を持つ約10のリストアイテムを循環させるためにスニードします。 –

1

非常に原始的な例が、ちょうど方法論を示す:

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

+1は、同じような答えに取り組んでいました。 setTimeoutは行く方法です。 – Loktar

関連する問題