Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在每次运行后使2个功能循环n次并延时?_Javascript - Fatal编程技术网

Javascript 如何在每次运行后使2个功能循环n次并延时?

Javascript 如何在每次运行后使2个功能循环n次并延时?,javascript,Javascript,我有两对函数。这些功能需要运行9次,持续3秒(时间长度)。每次运行之间的延迟应为1秒 有没有更好的方法来缩短loopIT()函数 window.onload=函数(){ //获取将触发操作的按钮 var b=document.getElementById('trigger'); //并在此处而不是在HTML中设置onclick处理程序 b、 onclick=loopIT; 函数startIT(){ //关闭开关,打开灯。 } 函数stopIT(){ //打开开关,关灯。 } 函数loopIT(

我有两对函数。这些功能需要运行9次,持续3秒(时间长度)。每次运行之间的延迟应为1秒

有没有更好的方法来缩短loopIT()函数

window.onload=函数(){
//获取将触发操作的按钮
var b=document.getElementById('trigger');
//并在此处而不是在HTML中设置onclick处理程序
b、 onclick=loopIT;
函数startIT(){
//关闭开关,打开灯。
}
函数stopIT(){
//打开开关,关灯。
}
函数loopIT(){
//打开灯,等待3秒钟,关闭灯。#1
setTimeout(startIT,100);
setTimeout(stopIT,3100);
//打开灯,等待3秒钟,关闭灯。#2
setTimeout(startIT,4100);
setTimeout(stopIT,7100);
//打开灯,等待3秒钟,关闭灯。#3
设置超时(startIT,8100);
设置超时(停止,11100);
//打开灯,等待3秒钟,关闭灯。#4
设置超时(startIT,12100);
设置超时(停止,15100);
//打开灯,等待3秒钟,关闭灯。#4
设置超时(startIT,16100);
设置超时(stopIT,19100);
//打开灯,等待3秒钟,关闭灯。#5
设置超时(startIT,22100);
设置超时(停止,25100);
//打开灯,等待3秒钟,关闭灯
设置超时(startIT,26100);
设置超时(stopIT,29100);
//打开灯,等待3秒钟,关闭灯。#7
设置超时(startIT,30100);
设置超时(停止,33100);
//打开灯,等待3秒钟,关闭灯。#8
设置超时(startIT,34100);
setTimeout(stopIT,37100);
//打开灯,等待3秒钟,关闭灯。#9
}        

}
您可以使用两个for循环

    function loopIT() {
        // goes from #1 to #4 (inclusive)
        for (var i = 4000; i <= 16000; i += 4000) {
            setTimeout(startIT, i + 100);
            setTimeout(stopIT, i + 3100);
        }
        // goes from #5 to #9 (inclusive)
        for (var j = 22000; j <= 34000; j += 4000) {
            setTimeout(startIT, j + 100);
            setTimeout(stopIT, j + 3100);
        }
    }
函数loopIT(){
//从#1到#4(包括在内)

对于(var i=4000;i您可以使用
setInterval
,它将每N毫秒运行一次特定函数

您可以使用计数器在N次后停止

//计算我们打开灯的次数
var-cpt=0;
//马上把灯打开
lightsOn();
//每3秒钟打开一次灯
var intervalOn=设定间隔(lightsOn,3000);
函数lightsOn()
{
控制台日志(“灯亮”);
//1秒钟后关灯
设置超时(lightsOff,1000);
}
函数lightsOff()
{
控制台日志(“灯关闭”);
++cpt;
//如果我们已经关了9次灯,停止开灯。
如果(cpt==9)
{
间隔时间;
}

}
我建议使用一个do-while循环,它会一直运行到最后(在您的例子中大约是40秒)。您还可以添加一个迭代器,每个循环增加一次迭代器

function loopIt() {

  let timeout = 100;

  do {
     setTimeout(startIt(), timeout);
     timeout += 3000;
     setTimeout(stopIt(), timeout);
     timeout += 1000;
  } while (timeout < 40000);

}
函数loopIt(){
设超时=100;
做{
setTimeout(startIt(),timeout);
超时+=3000;
setTimeout(stopIt(),timeout);
超时+=1000;
}而(超时<40000);
}
我的建议是:

var repeatedTimes = 0;
function loopIt(){ 
    if(repeatedTimes < 9){
      startIT();
      setTimeout(stopIT, 3000);
      setTimeout(loopIt, 4000);
    }
    repeatedTimes++;
}
setTimeout(loopIt, 100);
var repeatedTimes=0;
函数loopIt(){
如果(重复次数<9){
startIT();
设置超时(停止,3000);
setTimeout(loopIt,4000);
}
重复次数++;
}
setTimeout(loopIt,100);
希望它对(i=0;i<9;i++){setTimeout(startIT,(4000*i)+100);setTimeout(stopIT,(4000*i)+3100)}有帮助