更新setInterval值,其间隔为自身(不生成随机数)

时间:2017-03-09 11:48:09

标签: jquery delay setinterval updating

使用jQuery更改 iframe src,每 60秒 (此工作正常)

我的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号码将是 15 &amp;之间的随机号码。 30 秒。

1 个答案:

答案 0 :(得分:2)

一旦定义了间隔,就无法更改间隔。解决此问题的方法是链接setTimeout()个调用,在每个调用之间产生一个随机延迟:

&#13;
&#13;
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;
}
&#13;
&#13;
&#13;

  

如何完成循环,它会停止?

在这种情况下,您可以检查i > locations.length是否再次调用该函数:

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