Canvas学習(1) マウス追従
by Nick Hulea
HTML
<div style="margin:0 auto; text-align:center;">
<canvas id="canvas" width="480" height="480" style="margin:0 auto;"></canvas>
</div>
JavaScript
var Class = function () {
return function () {
this.initialize.apply(this, arguments)
}
}
var Stage = Class();
Stage.prototype = {
initialize: function (canvasId, bgColor, rate) {
this.rate = Math.round(1000 / rate);
this.canvas = document.getElementById(canvasId);
this.context = this.canvas.getContext("2d");
this.bgColor = bgColor;
this.rect = this.canvas.getBoundingClientRect();
this.mouseX = 0;
this.mouseY = 0;
this.children = [];
var self = this;
this.canvas.onmousemove = function (e) {
self.mouseX = e.clientX - self.rect.left;
self.mouseY = e.clientY - self.rect.top;
};
},
refresh: function () {
this.context.fillStyle = this.bgColor;
this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
},
addChild: function (obj) {
this.refresh();
this.children.push(obj);
obj.stage = this;
obj.draw();
},
update: function () {
this.refresh();
for (var i = 0; i < this.children.length; i++) {
this.children[i].draw();
}
},
rendering: function (func) {
var self = this;
setInterval(function () {
func();
self.update();
}, this.rate);
}
};
var Circle = Class();
Circle.prototype = {
initialize: function (radius, color) {
this.radius = radius;
this.color = color;
this.stage = null;
this.x = 0;
this.y = 0;
},
draw: function () {
if (this.stage == null) return;
var context = this.stage.context;
context.fillStyle = this.color;
context.beginPath();
context.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
context.closePath();
context.fill();
}
};
window.addEventListener("load", function () {
var stage = new Stage("canvas", "#ccc", 50);
var circle = new...