Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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中使用计时器循环而不冻结浏览器?_Javascript_Css_Loops_Timer - Fatal编程技术网

如何在JavaScript中使用计时器循环而不冻结浏览器?

如何在JavaScript中使用计时器循环而不冻结浏览器?,javascript,css,loops,timer,Javascript,Css,Loops,Timer,我正在尝试学习如何使用Javascript和CSS动态更改浏览器中的显示。一切都很顺利,直到我试着改变。代码启动一次,工作正常,但当我尝试循环时,每次尝试循环都会冻结浏览器。我显然是JavaScript新手,而且做了一些非常错误的事情。以下是问题代码: function changes() { var x = 0; do { setTimeout(timerRed, 3000); setTimeout(timerWhite, 6000); s

我正在尝试学习如何使用Javascript和CSS动态更改浏览器中的显示。一切都很顺利,直到我试着改变。代码启动一次,工作正常,但当我尝试循环时,每次尝试循环都会冻结浏览器。我显然是JavaScript新手,而且做了一些非常错误的事情。以下是问题代码:

function changes()
{
  var x = 0;  
  do
  {    
    setTimeout(timerRed, 3000);  
    setTimeout(timerWhite, 6000); 
    setTimeout(timerBlue, 9000);
    setTimeout(timerBlack, 12000);  
    setTimeout(timerGreen, 18000); 
    setTimeout(timerOrange, 21000);
    setTimeout(timerClear(x), 24000);  
  } while (x >= 0);  
}
我将跳过timerRed()等。。。为了节省空间,而且因为CSS更改工作正常。在循环结束时,我尝试以下方法:

  function timerClear(x) 
  {
    clearTimeout(x); 
    x = 0; 
  }
并冻结浏览器。那么,循环这些函数的正确方法是什么呢

多谢各位


PS:换句话说,我想无限循环或循环颜色函数,而不锁定浏览器

丢失do while循环。您正在创建这些计时器中的每一个,这些计时器反过来会启动每个回调函数无数次。还请注意,您的局部变量x不在回调的作用域内。

我可能有误解,但如果您打算让这些计时器永远启动,您应该使用一个间隔,它将一直启动,直到停止:

function changes()
{ 
    setInterval(timerRed, 3000);  
    setInterval(timerWhite, 6000); 
    setInterval(timerBlue, 9000);
    setInterval(timerBlack, 12000);  
    setInterval(timerGreen, 18000); 
    setInterval(timerOrange, 21000);
}
如果需要停止其中一项,请按如下方式创建:

var redInterval = setInterval(timerRed, 3000);  
…为了阻止它:

clearInterval(redInterval);
好的,明白了

  function changes()
  {
    color(); // changes() tests a lot of JavaScript CSS I've been trying out, but color() is the only thing relevant to my question, the rest would just be clutter.    
  }

  function color() 
  {
    setTimeout(timerRed, 0000);  
    setTimeout(timerWhite, 3000); 
    setTimeout(timerBlue, 6000);
    setTimeout(timerBlack, 9000);  
    setTimeout(timerGreen, 12000); 
    setTimeout(timerOrange, 15000);
    // And I create the infinite loop of color cycling with**out** locking up the browser by having color call itself at the end of every color cycle
    setTimeout(color, 18000);        
   }

谢谢大家的意见。希望这将有助于下一个遇到这个问题的JavaScript新手

无限循环。。。x从来都不小于0。我看过其他循环代码,但它不适用于我的情况。但这就是问题所在,它应该是一个无限循环。我希望颜色循环继续,直到浏览器关闭。那么,如何在不锁定浏览器的情况下循环?
setInterval(changes,24000)
。(并失去循环,如前所述。)“那么,循环这些函数的正确方法是什么”-你只说了什么不能做。。。OP希望代码永远循环(而不冻结浏览器)。
这反过来会触发
-它们中没有一个会触发,因为循环从未退出。明白了!!我得照顾一个不爱我的人,然后我会发布代码。谢谢大家的意见。这是朝着正确方向迈出的一步,谢谢。唯一的问题是,这些函数的启动是无序的。红色,白色。蓝色,黑色,红色,绿色,橙色,黑色,蓝色,等等…这是因为它们的发射频率不同。要保留相同的序列,请在所有setInterval调用中使用相同的毫秒数,并在调用之间进行等待。谢谢。什么是“等待”?我该如何编码?weir的意思是将红色间隔设置为3000(3秒),白色间隔设置为6000(6秒),等等。使它们都相同,例如3000,它们将同时开火。更好的是,如果您希望所有代码同时启动,只需设置一个间隔,并将所有代码放在该函数中。这就不需要多个实例“setInterval”。