我想在瀏覽器中使用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