2017-03-09 57 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