我想在canvas上創建水滴下降效果。我使用array.to創建了一些樣本滴動畫動畫它我的意思是改變它們的位置我介紹setTimeout function.it工作的單個水滴。因爲我的畫布上有多次下降,它不再工作了..drops仍然保持靜止。setTimeout函數可以用來動畫所有單獨的下拉?在HTML畫布上的雨滴動畫
這裏是搗鼓個體下降jsfiddle
<html>
<head>
</head>
<body>
<script>
function makeit(){
var canvas=document.getElementById("mycanvas");
var ctx=canvas.getContext('2d');
canvas.width=600;
canvas.height=600;
canvas.style.border="1px solid black";
var drop=function (x,y){
ctx.save();
ctx.fillStyle="orange";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.fill();
ctx.fillStyle="red";
ctx.moveTo(x-5,y);
ctx.lineTo(x,y-7);
ctx.lineTo(x+5,y);
ctx.arc(x,y,5,0,Math.PI);
ctx.closePath();
ctx.fill();
ctx.restore();
y=y+3;
if(y==canvas.height){
y=0;
}
var m=setTimeout('drop('+x+','+y+')',20);
}
var xpos=[10,20,30,40,50,60,70,70,76];
var ypos=[30,20,60,80,76,90,30,40,79];
for(i=0;i<xpos.length;i++){
drop(xpos[i],ypos[i]);
}
}
window.onload=makeit;
</script>
<canvas id="mycanvas" ></canvas>
</body>
</html>
這是正確的,但你應該解釋爲什麼這會有所幫助。除了這是一個不好的做法,傳遞一個字符串到'setTimeout'將會在全局上下文中運行代碼。 'drop'在全局上下文中不存在,因此無法運行。 –
它應該是這樣的http://jsfiddle.net/humptydumpty45/TumeY/其中個別滴可以單獨確定。 –
@ James Montagne全球環境的含義是什麼?如果你解釋 –