如何在JavaScript中使用计时器循环而不冻结浏览器?
我正在尝试学习如何使用Javascript和CSS动态更改浏览器中的显示。一切都很顺利,直到我试着改变。代码启动一次,工作正常,但当我尝试循环时,每次尝试循环都会冻结浏览器。我显然是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
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”。