我想在浏览器中使用canvas元素创建基本频闪灯。我期待setInterval继续调用changeBG函数来改变为随机背景颜色。这个函数可以独立工作,但不能在setInterval调用时使用。我试图在firebug中拉起这个页面,它告诉我颜色是未定义的。这是有问题的代码。setInterval和未定义参数的问题
<html>
<head>
<title>Strobe!</title>
<link rel="stylesheet" type="text/css" href="reset.css" />
<script type="text/javascript">
function changeBG(colors,ctx,canvas) {
ctx.fillStyle = colors[Math.floor(Math.random()*colors.length)]
ctx.fillRect(0,0,canvas.width,canvas.height)
}
function eventLoop() {
var colors = ['#000000','#ff0000','#00ff00','#0000ff','#ffff00','#ff00ff','#00ffff']
var canvas = document.getElementById('mainCanvas')
var ctx = canvas.getContext('2d')
canvas.width = window.innerWidth
canvas.height = window.innerHeight
//changeBG(colors,ctx,canvas)
setInterval("changeBG(colors,ctx,canvas)", 1000);
}
</script>
</head>
<body onload="eventLoop()">
<canvas id="mainCanvas" width="800" height="600">
</canvas>
</body>
我是新来的JavaScript,因此任何见解什么那么将高度赞赏。
只是为了OP的完整性:如果您将'colors','ctx'和'canvas'变量声明为全局变量,而不使用'var',则代码有效。为什么?因为变数现在是全球性的。每当有人这样做时,上帝会杀死一只小猫(几乎)。 – Chubas 2010-08-11 21:29:58
非常感谢。我曾经与死猫一起试过这个版本,但我的良知无法接受。 – 2010-08-11 21:52:10
@Chubas:正确。我会提到的,但忘了! – EndangeredMassa 2010-08-11 22:32:26