Javascript setInterval()函数未按预期工作
我正在尝试将背景色从rgb(255255255)切换到rgb(0,0,0),并使用每两种颜色之间的setInterval检查所有可能性,但由于某种原因,在激活函数start()时,背景色立即变为黑色。有人知道如何解决这个问题吗 我没有任何解决方案的想法,所以我愿意接受任何想法Javascript setInterval()函数未按预期工作,javascript,Javascript,我正在尝试将背景色从rgb(255255255)切换到rgb(0,0,0),并使用每两种颜色之间的setInterval检查所有可能性,但由于某种原因,在激活函数start()时,背景色立即变为黑色。有人知道如何解决这个问题吗 我没有任何解决方案的想法,所以我愿意接受任何想法 function start() { var red = 255; var green = 255; var blue = 255; var i
function start() {
var red = 255;
var green = 255;
var blue = 255;
var id = setInterval(colorful(), 1000);
function colorful() {
document.body.style.backgroundColor = "rgb(" + [red,green,blue].join(",") + ")";
if (blue == 0) {blue = 0; green--;}
if (green == 0) {green = 0; red--;}
if (red == 0) {clearInterval(id);}
blue--;
}
}
我希望看到背景颜色的变化,并查看从0到255的所有rgb()颜色,但当我运行start()函数时,屏幕立即变黑。如果在
setTimeout
调用中将彩色()
更改为彩色
,则它与代码一起工作。您需要将间隔持续时间从1000
更改为5
但要注意:5毫秒的时间非常短,不能保证它能工作得那么快
函数开始(){
var-red=255;
绿色变量=255;
var蓝=255;
var id=设置间隔(彩色,5);
函数(){
document.body.style.backgroundColor=“rgb(“+[红、绿、蓝])。加入(“,”+”);
蓝色--;
如果(blue代码中存在问题,一旦修复,它将按预期工作。
从传递给setInterval的方法中删除括号,并检查颜色变量的边界,以避免出现负值:
var id = setInterval(colorful, 100);
工作片段:
函数开始(){
var-red=255;
绿色变量=255;
var蓝=255;
var id=设定间隔(彩色,10);
函数(){
document.body.style.backgroundColor=“rgb(“+[红、绿、蓝])。加入(“,”+”);
如果(蓝色===0&&green>0){green--;}
如果(绿色===0&&red>0){red--;}
如果(红色===0){clearInterval(id);}
如果(蓝色>0)蓝色--;
}}
start();
coloric
非coloric()
在setInterval
调用中,应该使用css转换来调用coloric
并将其结果(未定义)传递给setInternal
。删除括号以传递函数本身。setInterval()
函数被设置为1000毫秒,因为我试图检查计时是否有问题,它应该是5毫秒左右。@PhilippSander在这种情况下,他需要CSS动画不,它不适用于OP的代码,因为这不是OP的代码。当你修复它时,它会起作用。@vlaz抱歉,我的错。我已经发布了我的答案来检查代码是否有问题ld按预期工作,在评论中我无法发布工作片段。MosèRaguzzini我尝试过这个,你是对的,这是问题所在,但现在出现了一个新的问题。几秒钟后它会永久变为黄色。编辑片段检查颜色变量边界