我想在画布(canvas)上制作一个动画,其中有一个实心矩形在从白色到红色再到绿色、蓝色,最后变成白色的过程中移动。我认为颜色正常,但速度太快,甚至看不到任何东西,因此我搜索了等待(wait)或延迟(delay)选项,并发现了setInterval方法。我尝试了所有可能让它起作用的方法,但都没有成功:
这是我写的相对简洁的代码:
HTML 部分:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<style type="text/css">
canvas { border: 3px solid black; }
</style>
</head>
<body>
<div>
<button onclick="draw()">Start the gradient</button><br><br>
<canvas id="can" width="200" heigth="200"></canvas>
</div>
</body>
</html>
Javascript:
function draw() {
var can = document.getElementById('can');
if (can.getContext) {
var ctx = can.getContext('2d');
var r = 0;
var g = 0;
var b = 0;
var i;
for(i=0;i<255;i++){
ctx.fillStyle = 'rgb('+r+', '+g+', '+b+')';
ctx.fillRect(0, 0, 200, 200);
r = r + 1;
}
for(i=0;i<255;i++){
ctx.fillStyle = 'rgb('+r+', '+g+', '+b+')';
ctx.fillRect(0, 0, 200, 200);
r = r - 1;
g = g + 1;
}
for(i=0;i<255;i++){
ctx.fillStyle = 'rgb('+r+', '+g+', '+b+')';
ctx.fillRect(0, 0, 200, 200);
g = g - 1;
b = b + 1;
}
for(i=0;i<255;i++){
ctx.fillStyle = 'rgb('+r+', '+g+', '+b+')';
ctx.fillRect(0, 0, 200, 200);
r = r + 1;
g = g + 1;
}
}
//'can' is the canvas//
//Red->Green->Blue//
}
setInterval
中尝试过的内容吗? - Frank Modica