Javascript setInterval()函数未按预期工作

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

我正在尝试将背景色从rgb(255255255)切换到rgb(0,0,0),并使用每两种颜色之间的setInterval检查所有可能性,但由于某种原因,在激活函数start()时,背景色立即变为黑色。有人知道如何解决这个问题吗

我没有任何解决方案的想法,所以我愿意接受任何想法

    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我尝试过这个,你是对的,这是问题所在,但现在出现了一个新的问题。几秒钟后它会永久变为黄色。编辑片段检查颜色变量边界