2017-03-09 61 views
1

隨着jQuery改變iframesrc,每60秒(這工作正常)更新的setInterval值,與本身間隔(不生成隨機數)

jQuery

$(document).ready(function(){ 
    var array = ['http://link1.com', 'http://link2.com', 'http://link3.com']; 
    var locations = array; 
    var len = locations.length; 
    var iframe = $('#frame'); 
    var i = 0; 
    setInterval(function() { 
     iframe.attr('src', locations[++i]); 
    }, 60000); 

}); 

iframe

<iframe id="frame" src="http://link.com"></iframe> 

iframe src功能工作正常,我想實現的,而不是有固定delay,號碼(現在60秒),我想更改delay的值,每次iframe src已更新。

delay數量將 & 秒之間的隨機

+1

[生成的JavaScript隨機整數在一個特定的範圍?]的可能的複製(HTTP://計算器.com/questions/1527803 /生成隨機整數在JavaScript中的特定範圍) – Liam

+0

@Liam它不是一個重複的話題。在那個主題中,你只是生成一個隨機數。我在尋找的是通過在'jQuery'中爲'自身設置'Interval'來更新'setInterval''delay'的值。 – Rubioli

回答

2

一旦定義了間隔,就不能更改間隔。針對此解決方法是鏈setTimeout()調用,生成每個呼叫這樣的事情之間的隨機延遲:

var locations = ['http://link1.com', 'http://link2.com', 'http://link3.com']; 
 
var i = 0; 
 

 
setTimeout(setSrc, getDelay()); 
 

 
function setSrc() { 
 
    console.log(locations[++i % locations.length]); 
 
    setTimeout(setSrc, getDelay()); 
 
} 
 

 
function getDelay() { 
 
    var delay = (Math.floor(Math.random() * 30) + 15) * 1000; 
 
    console.log('waiting: ' + delay); 
 
    return delay; 
 
}

我怎樣才能使它所以當循環完成,停止?

在這種情況下,你可以檢查是否i > locations.length然後不再次調用該函數:

function setSrc() { 
    console.log(locations[++i]); 
    if (i < locations.length) 
    setTimeout(setSrc, getDelay()); 
} 
+0

Thanks @Rory。偉大的作品:)。我只有一個問題。我只想運行一次循環,並通過在我的'setSrc()'函數中執行'iframe.attr(「src」,locations [++ i])'來實現這一點。這是對的嗎?我發現在完成一次循環後,'getDelay()'函數仍然運行。我怎麼能這樣做,當循環完成,它停止。謝謝 – Rubioli

+0

我更新了你的答案 –

+0

謝謝你:) – Rubioli