2011-02-10 45 views
0

總新手在這裏。我有一個腳本,它使用setInterval來過濾列表並每隔2秒向每個列表項添加/刪除一個類。如何申請多次setInterval循環

如何編輯此腳本,以便我可以對每個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); 
+0

這意味着,你的第五元素,你會爲第二的0.09th設定的時間間隔。衰減間隔的目的是什麼?你將以極快的速度溢出事件。 – Joe 2011-02-10 05:29:26

+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 = infinity&f = Sum.sumupperlimit_infinity&a = * FVarOpt.1 -_ ** - 。*** Sum.sumvariable ---。* - ) – Joe 2011-02-10 05:39:06

回答

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`對嗎? – 2011-02-10 05:34:28

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