Waving Blocks
Nice canvas effect where boxes are waving and changing colors.
Javascript file: fx_boxmania.js:
function BoxMania(canvas_ctx, width_box, height_box, num_cols, num_rows) {
this.dst = canvas_ctx;
this.w = width_box;
this.h = height_box;
this.j = num_rows;
this.i = num_cols;
this.spiner = 0;
this.draw = function() {
this.spiner += 2;
for (this.j = -4; this.j < 19; this.j++) {
for (this.i = 0; this.i < 20; this.i++) {
var x = this.i * this.w + 10 + Math.floor(Math.sin((this.spiner + this.i ) * Math.PI / 360) * 30)
var y = this.j * this.h + 10 + Math.floor(Math.sin((this.spiner + this.i ) * Math.PI / 360) * 140);
var ts = this.spiner + this.i * this.j + Math.sin(this.spiner % 100 * Math.PI / 360);
var rx = parseInt(this.w * Math.sin(ts * Math.PI / 180));
var ry = parseInt(this.h * Math.sin(ts * Math.PI / 180));
var sx = parseInt((this.w - rx) / 2);
var sy = parseInt((this.h - ry) / 2);
var color_r = sx - ry + 20 + this.i * this.j;
var color_g = Math.floor(260 * Math.sin(this.spiner / 150));
var color_b = Math.floor(360 * Math.cos(this.spiner / 50));
this.dst.strokeStyle = 'rgba(' + color_r + ', ' + color_g + ', ' + color_b + ', 1)';
this.dst.fillStyle = 'rgba(' + color_r + ', ' + color_g + ', ' + color_b + ', 0.6)';
this.dst.beginPath();
this.dst.moveTo(x, y);
this.dst.lineTo(x + rx, y);
this.dst.lineTo(x + rx, y + ry);
this.dst.lineTo(x, y + ry);
this.dst.closePath();
this.dst.fill();
this.dst.stroke();
}
}
}
}
HTML page
<!DOCTYPE html>
<html>
<head>
<title>Blocks</title>
</head>
<body>
<canvas id="demo_canvas" style="display:none;" width="640" height="480"></canvas>
<script type="text/javascript" src="/files/canvas/3/fx_boxmania.js"></script>
<script type="text/javascript">
var WIDTH = 640;
var HEIGHT = 480;
var canvas;
var ctx, ctx2;
var boxes;
function init() {
canvas = document.getElementById("demo_canvas");
ctx = canvas.getContext("2d");
boxes = new BoxMania(ctx, 40, 40, 20, 20);
draw();
}
function draw() {
ctx.fillStyle = "#000";
ctx.fillRect(0, 0, WIDTH, HEIGHT);
boxes.draw();
ctx.drawImage(canvas, 0, 0);
requestAnimationFrame(draw);
}
window.onload = function () {
init();
};
</script>
</body>
</html>