Javascript setInterval time未获得正确的值

Javascript setInterval time未获得正确的值,javascript,jquery,Javascript,Jquery,我有两个数组。一个是文件,另一个是时间,我想在iframe中显示它们。我在它们之间循环,文件显示正确,但时间始终设置为第一个元素 iframe始终加载10000毫秒。 问题是因为您只定义了一个间隔,因此延迟总是相同的 要解决这个问题,您可以使用递归超时来代替,当上一个超时触发时定义下一个超时。试试这个: $(函数(){ var url=['/uploads/presentations/156837902.pdf'、'/uploads/presentations/156837925.mp4'、

我有两个数组。一个是文件,另一个是时间,我想在iframe中显示它们。我在它们之间循环,文件显示正确,但时间始终设置为第一个元素

iframe始终加载10000毫秒。


问题是因为您只定义了一个间隔,因此延迟总是相同的

要解决这个问题,您可以使用递归超时来代替,当上一个超时触发时定义下一个超时。试试这个:

$(函数(){
var url=['/uploads/presentations/156837902.pdf'、'/uploads/presentations/156837925.mp4'、'/uploads/presentations/156837959.jpg'、'/uploads/presentations/156838138.docx'、'/uploads/presentations/156838215.ppt'];
var时间=[10000,40000,10000,20000,10000];
函数loadIframe(i=0){
$('iframe').attr('src',url[i%url.length]);
log(`Changing src to${url[i%url.length]}`);
setTimeout(函数(){
加载帧(++i);
},时间[i%时间长度];
}
loadIframe();
});

这个问题是因为您只定义了一个间隔,因此延迟总是相同的

要解决这个问题,您可以使用递归超时来代替,当上一个超时触发时定义下一个超时。试试这个:

$(函数(){
var url=['/uploads/presentations/156837902.pdf'、'/uploads/presentations/156837925.mp4'、'/uploads/presentations/156837959.jpg'、'/uploads/presentations/156838138.docx'、'/uploads/presentations/156838215.ppt'];
var时间=[10000,40000,10000,20000,10000];
函数loadIframe(i=0){
$('iframe').attr('src',url[i%url.length]);
log(`Changing src to${url[i%url.length]}`);
setTimeout(函数(){
加载帧(++i);
},时间[i%时间长度];
}
loadIframe();
});

这是因为您只调用了一次
setInterval
,这就是传递延迟参数的时间。这是因为您只调用了一次
setInterval
,这就是传递延迟参数的时间。
$(function() {
  var urls = ['/uploads/presentations/1560837902.pdf', '/uploads/presentations/1560837925.mp4', '/uploads/presentations/1560837959.jpg', '/uploads/presentations/1560838138.docx', '/uploads/presentations/1560838215.ppt'];
  var time = [10000, 40000, 10000, 20000, 10000];
  var i = 0;

  function loadIframe(url) {
    $('#iframe').attr('src', url);
  }

  setInterval(function() {
    // update the index
    i = (i + 1) % urls.length;
    loadIframe(urls[i]);
  }, time[i]);

  loadIframe(urls[i]);
});