2013-06-20 199 views
3

我想隨機加載一個隨機圖像。出於某種原因,這不是隨機化的時間,儘管它確實隨機化圖像。任何想法有什麼不對?創建一個時間間隔,該時間間隔將導致函數在JavaScript中的隨機時間運行

var randomTime2 = 3000; //initialize the random time with this value to start 

setInterval(function(){ 
    var randomNum = Math.floor((Math.random()*3)+1);//random num for image 

    $('.recent-project2 img').fadeTo('slow',0,function(){ 
      var randomImg = "img/recent-projects-"+randomNum+".jpg"; 

      $('.recent-project2 img').attr('src',randomImg); 
      $('.recent-project2 img').fadeTo('slow',1); 

     }); 
    randomTime2 = Math.floor(Math.random()*10000);//reset random time 
    return randomTime2; //return random time 
    },randomTime2); 
+0

您可能需要先執行一個'clearInterval',然後重新設置它。從'set/clearInterval'稍微玩過一點,這有點痛苦。 –

回答

2

setInterval調用會將您的函數和所需的時間間隔添加到內部表中,以便在預期的延遲時間過去時記得調用您的代碼。但請注意,即使您更改用於指定時間間隔的變量,這對內部表格也沒有影響:當您調用setInterval時已讀取該值,並且現在已存儲該值。

隨機化回調時給出函數的名稱,只是用setTimeout代替setInterval

function MyCallback() { 
    ... 
    setTimeout(myCallback, new_delay); 
} 

setTimeout(myCallback, first_delay); 

在每個這種方法叫你可以決定下一次調用之前不同的延遲。

4

使用setTimeout並在隨機時間結束時重新觸發函數。

1

您不能在函數內更改randomTime2的值,因爲它是按值傳遞的,而不是引用。

setInterval(someFunction, someNumberValue)

這行代碼將調用someFunctionsomeNumberValue-毫秒。該值不會動態更新。

有很多方法可以使這項工作,但我建議只使用setTimeout,並使someFunction的結束再次調用它。例如:

//psudo-code, might not actually run, just showing you the general idea. 
var someFunction = function(){ 
    console.log("Whatever."); 
} 

var repeatFunction = function(){ 
    someFunction() 
    var timeoutID = window.setTimeout(repeatFunction, Math.random()*10000); 
} 

repeatFunction(); //Starts the loop.