JSFiddle - React, Tailwind, and code Playground
HTML
<body>
<canvas id="c"></canvas>
</body>
CSS
canvas {
position: absolute;
top: 0px;
left: 0px;
width: 500px;
height: 500px;
border: 2px solid;
}
JavaScript
var canvas = document.getElementById("c");
var ctx = canvas.getContext("2d");
var mouse = {};
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
};
canvas.addEventListener('mousemove', function(evt) {
mouse = getMousePos(canvas, evt);
console.log("e");
}, false);
CONFIG = {
debug: false
};
BOX = function() {
this.x = 0;
this.y = 0;
this.width = 100;
this.height = 100;
};
BOX.prototype = {
move: function(x, y, delta) {
if (CONFIG.debug)
console.log("BOX:: move()");
this.x = x * delta;
this.y = y * delta;
},
render: function() {
if (CONFIG.debug)
console.log("BOX:: render()");
if (CONFIG.debug)
console.log(this.x, this.y, this.width, this.height);
ctx.beginPath();
ctx.rect(this.x, this.y, this.width, this.height);
ctx.stroke();
}
};
FRAME = function() {
this.elements = [];
};
FRAME.prototype = {
add: function(obj) {
this.elements.push(obj);
},
clear: function() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
},
step: function(delta) {
this.clear();
for (var i = 0; i < this.elements.length; i++) {
if (this.elements[i].render) {
this.elements[i].move(mouse.x, mouse.y, delta);
this.elements[i].render();
}
}
}
};
ANIMATION = {
lastTick: null,
currentTick: null,
elem: null,
init: function() {
this.elem = new FRAME();
this.elem.add(new BOX());
ANIMATION.lastTick = null;
ANIMATION.currentTick = null;
if (CONFIG.debug)
console.log("ANIMATION:: init()");
},
step: function() {
if (ANIMATION.lastTick == null) {
if (CONFIG.debug)
console.log("ANIMATION:: set lastTick: first Tickness");
ANIMATION.lastTick = Date.now();
}
ANIMATION.currentTick = Date.now();
var delta = (ANIMATION.lastTick - ANIMATION.currentTick);
ANIMATION.lastTick =...