Javascript jQuery中带有setTimeout()的变量计时器。每个

Javascript jQuery中带有setTimeout()的变量计时器。每个,javascript,jquery,timer,settimeout,Javascript,Jquery,Timer,Settimeout,我想以幻灯片形式循环播放一组jpg图片。到目前为止,我一直在成功地使用setInterval。但是,我现在希望每个幻灯片都有一个自定义时间。例如,幻灯片1显示6秒钟,然后幻灯片2显示3秒钟,等等。我尝试了以下代码: var sl = [["PodLoop1.jpg", 6000], ["PodLoop2.jpg", 3000]]; $.each(sl, function(i, value) { fl = '<img src="media/' + value[0] + '" heig

我想以幻灯片形式循环播放一组jpg图片。到目前为止,我一直在成功地使用setInterval。但是,我现在希望每个幻灯片都有一个自定义时间。例如,幻灯片1显示6秒钟,然后幻灯片2显示3秒钟,等等。我尝试了以下代码:

var sl = [["PodLoop1.jpg", 6000], ["PodLoop2.jpg", 3000]];
$.each(sl, function(i, value) {
    fl = '<img src="media/' + value[0] + '" height="100%">'
    setTimeout(function(){
        $("#InnerMedia").html(fl);
        if (i >= sl.length) {
            window.location.href = "./media.php"; // refresh to restart from the beginning
        }
    }, value[1])
});
var sl=[[“PodLoop1.jpg”,6000],“PodLoop2.jpg”,3000];
$。每个(sl,函数(i,值){
fl=“”
setTimeout(函数(){
$(“#InnerMedia”).html(fl);
如果(i>=sl.length){
window.location.href=“./media.php”//刷新以从头开始重新启动
}
},值[1])
});

但这不起作用。它只是跳到列表中的最后一张幻灯片。我做错了什么?例如,我在SO上看过几个类似的问题,但它们似乎都没有涉及可变计时器。

您的问题是您正在使用
。每个
循环

设置超时 setTimeout的作用是在指定的时间注册一个事件。现在,当您在循环中运行此命令时,将注册2个事件,1个在3秒后,另一个在6秒后。所以它运行正常

要解决此问题,您必须对这些
setTimeout
s进行链式初始化。您必须在另一个事件中注册新事件

样本

函数createTimeout(arr,索引){
如果(!arr[index]==未定义)返回;
setTimeout(函数(){
console.log(arr[index][0]);
createTimeout(arr,++索引)
},arr[索引][1])
}
var sl=[“PodLoop1.jpg”,6000],“PodLoop2.jpg”,3000];
createTimeout(sl,0)i永远不会等于sl.length

将代码更改为
i>=sl.length-1

良好点。我错过了+1:-)但这是一个部分答案,因为用户希望链接事件。当我有一个较长的列表时,递归不是一个问题吗?
如果(!arr[index]==未定义)返回将确保它不会无休止地循环我指的是我有100个文件的状态(比如说),内存使用将是巨大的!因为递归…@Chiwda没有。您正在向函数传递引用和索引。所以它不会有那么大的影响,特别是在最后的关于记忆的讨论。