为什么这个setInterval代码不起作用?

时间:2011-09-02 16:17:37

标签: javascript

我试图每秒更改身体的背景颜色,但它不起作用。我做错了什么?

var colors = [
    "red", "blue", "green", "yellow", "red"
    ],
    rand = Math.ceil(Math.random() * colors.length - 1),
    t = setInterval(function() {
        document.body.style.backgroundColor = colors[rand];
    }, 1000);

3 个答案:

答案 0 :(得分:10)

您定义值rand一次,然后每次重复使用它。你的意思是:

var colors = [
"red", "blue", "green", "yellow", "red"
];
t = setInterval(function() {
    // use floor instead of ceil and then you can skip the -1
    var rand = Math.floor(Math.random() * colors.length)
    document.body.style.backgroundColor = colors[rand];
}, 1000);

另外,你使用逗号来分隔命令,虽然这并不总是会破坏(我至少可以想到它不会出现这种情况),这通常是一个坏主意,因为它意味着有一些更大的结构正在进行中。

根据patrick dw的评论,您使用逗号是正确的。它导致我在这种情况下有一个精神错误,特别是当rand移入setInterval的函数时。我建议您可以将其重新编写为var colors, t; colors =,以帮助人们了解更多信息(在某一点上看起来我不是唯一犯错误的人)

答案 1 :(得分:2)

rand只设置一次,试试这个:

var colors = [
    "red", "blue", "green", "yellow", "red"
    ],
    t = setInterval(function() {
        var rand = Math.ceil(Math.random() * colors.length - 1);
        document.body.style.backgroundColor = colors[rand];
    }, 1000);

答案 2 :(得分:0)

尝试以下

var colors = ["red", "blue", "green", "yellow", "red"];
t = setInterval(function() {
  var rand = Math.ceil(Math.random()) % colors.length;
  document.body.style.backgroundColor = colors[rand];
}, 1000);