animação html5
by rodrigonery
HTML
<canvas id="testeCanvas" width="800" height="800">
Seu browser não suporta Canvas.
</canvas>
JavaScript
var canvas = null,
context = null,
bufferCanvas = null,
bufferCanvasCtx = null,
flakeArray = [],
flakeTimer = null,
maxFlakes = 200;
var Flake = (function() {
this.x = Math.round(Math.random() * context.canvas.width);
this.y = -10;
this.drift = Math.random();
this.speed = Math.round(Math.random() * 5) + 1;
this.width = (Math.random() * 3) + 2;
this.height = this.width;
})
var addFlake = (function() {
flakeArray[flakeArray.length] = new Flake();
if (flakeArray.length == maxFlakes)
clearInterval(flakeTimer);
})
var blank = (function() {
bufferCanvasCtx.fillStyle = "#330033";
bufferCanvasCtx.fillRect(0,0,bufferCanvasCtx.canvas.width, bufferCanvasCtx.canvas.height);
})
var animate = (function() {
Update();
Draw();
})
var Update = (function() {
for (var i = 0; i < flakeArray.length; i++) {
if (flakeArray[i].y < context.canvas.height) {
flakeArray[i].y += flakeArray[i].speed;
if (flakeArray[i].y > context.canvas.height)
flakeArray[i].y = -5;
flakeArray[i].x += flakeArray[i].drift;
if (flakeArray[i].x > context.canvas.width)
flakeArray[i].x = 0;
}
}
})
var Draw = (function() {
context.save();
// cria uma região de corte
bufferCanvasCtx.beginPath();
bufferCanvasCtx.fillStyle="green";
bufferCanvasCtx.fillRect(0,0,bufferCanvas.width,bufferCanvas.height);
bufferCanvasCtx.arc(bufferCanvas.width/2,bufferCanvas.height/2,bufferCanvas.height/3,0,2*Math.PI);
bufferCanvasCtx.clip();
blank();
for (var i = 0; i < flakeArray.length; i++) {
bufferCanvasCtx.fillStyle = "white";
bufferCanvasCtx.fillRect(flakeArray[i].x,flakeArray[i].y,flakeArray[i].width,flakeArray[i].height);
}
// copia toda a imagem processada a partir da tela
context.drawImage(bufferCanvas, 0,0,bufferCanvas.width, bufferCanvas.height);
...