Javascript 在数组中循环并延迟函数
我试图连续循环遍历一个数值数组,该数组将作为触发另一个函数的延迟值传递给setInterval函数。以下是我所拥有的: HTML:Javascript 在数组中循环并延迟函数,javascript,arrays,settimeout,setinterval,timedelay,Javascript,Arrays,Settimeout,Setinterval,Timedelay,我试图连续循环遍历一个数值数组,该数组将作为触发另一个函数的延迟值传递给setInterval函数。以下是我所拥有的: HTML: 打开 JavaScript: $(document).ready(function(){ var timing = [5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000, 7000, 17000, 8000, 13000, 12000, 18000] //fu
打开
JavaScript:
$(document).ready(function(){
var timing = [5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000, 7000, 17000, 8000, 13000, 12000, 18000]
//function to change
function change(){
var p = $("p").html();
if(p === "On"){
$("p").html("Off");
} else {
$("p").html("On");
}
}
function myFunction(){
for (var i = 0; i < timing.length; i++){
var switchTime = timing[i];
setInterval(function(){
change();
},switchTime);
}
} myFunction();
});
$(文档).ready(函数(){
var定时=[5000,10000,17000,8000,14000,9000,12000,8000,20000,7000,13000,7000,17000,8000,13000,12000,18000]
//功能改变
函数更改(){
var p=$(“p”).html();
如果(p==“开”){
$(“p”).html(“关闭”);
}否则{
$(“p”).html(“On”);
}
}
函数myFunction(){
对于(变量i=0;i
我希望更改功能在不同的延迟时间连续启动。现在,当我运行它时,时间似乎不正确。如有任何建议,我们将不胜感激。谢谢 只需在
setInterval
函数中增加变量i
function myFunction(){
for (var i = 0; i < timing.length; ){
var switchTime = timing[i];
setInterval(function(){
change();
i++;
},switchTime);
}
}
函数myFunction(){
对于(变量i=0;i
只需在setInterval
函数中增加变量i
function myFunction(){
for (var i = 0; i < timing.length; ){
var switchTime = timing[i];
setInterval(function(){
change();
i++;
},switchTime);
}
}
函数myFunction(){
对于(变量i=0;i
使用setTimeout
而不是setInterval
,因为这是一个循环setInterval
将初始化一个计时器,该计时器将在指定的延迟时间内连续触发(例如,如果延迟5秒,它将在5、10、15等时间触发)。通过在迭代中使用setTimeout
,计时器在指定的延迟后每次迭代只触发一次,下一次迭代将为下一个延迟值初始化一个新计时器。使用setTimeout
而不是setInterval
,因为这是在循环中进行的setInterval
将初始化一个计时器,该计时器将在指定的延迟时间内连续触发(例如,如果延迟5秒,它将在5、10、15等时间触发)。通过在您的迭代中使用setTimeout
,计时器在指定的延迟后每次迭代只触发一次,下一次迭代为下一个延迟值初始化一个新计时器。我假设您可能没有在调用setInterval
时清除旧的间隔。根据需要,您可能需要使用clearInterval
清除以前的间隔。特别是如果你在所有的间歇期都使用相同的方法,我想你可能得不到你想要的。因此:
clearInterval
函数清除当前间隔我假设您可能没有在调用
setInterval
时清除旧的间隔。根据需要,您可能需要使用clearInterval
清除以前的间隔。特别是如果你在所有的间歇期都使用相同的方法,我想你可能得不到你想要的。因此:
clearInterval
函数清除当前间隔在任何情况下,使用循环都不会起作用,因为许多
setInterval
(或setTimeout()
)会在几微秒内“立即”启动。因此,他们按照自己的
计时[i]
完成自己的工作,但几乎是在同一时间
相反,您必须仅在前一步结束时启动每一步
下面是一个工作示例(另请参见),其中我添加了一些过程的视觉跟踪:
HTML:
打开
Javascript:
$(document).ready(function(){
var timing = [
5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000,
7000, 17000, 8000, 13000, 12000, 18000
];
function myFunction(i){
i |= 0;
if (i < timing.length - 1) {
var switchTime = timing[i]
$onOff = $('#onOff');
$('#delay').html('i=' + i + ', delay=' + switchTime);
$onOff.html($onOff.html() == 'On' ? 'Off' : 'On');
setTimeout(
function() {
myFunction(i + 1);
}, switchTime
)
} else {
$('#delay').html('end');
}
}
myFunction();
});
$(文档).ready(函数(){
var定时=[
5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000,
7000, 17000, 8000, 13000, 12000, 18000
];
函数myFunction(i){
i |=0;
如果(i
在任何情况下,使用循环都不会起作用,因为许多设置间隔
(或设置超时()
)会在几微秒内“立即”启动。因此,他们按照自己的
计时[i]
完成自己的工作,但几乎是在同一时间
相反,您必须仅在前一步结束时启动每一步
下面是一个工作示例(另请参见),其中我添加了一些过程的视觉跟踪:
HTML:
打开
Javascript:
$(document).ready(function(){
var timing = [
5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000,
7000, 17000, 8000, 13000, 12000, 18000
];
function myFunction(i){
i |= 0;
if (i < timing.length - 1) {
var switchTime = timing[i]
$onOff = $('#onOff');
$('#delay').html('i=' + i + ', delay=' + switchTime);
$onOff.html($onOff.html() == 'On' ? 'Off' : 'On');
setTimeout(
function() {
myFunction(i + 1);
}, switchTime
)
} else {
$('#delay').html('end');
}
}
myFunction();
});
$(文档).ready(函数(){
var定时=[
5000, 10000, 17000, 8000, 14000, 9000, 12000, 8000, 20000, 7000, 13000,
7000, 17000, 8000, 13000, 12000, 18000
];
函数myFunction(i){
i |=0;
如果(i
到底是什么不起作用?