JSFiddle - React, Tailwind, and code Playground
by Mariana Villamizar
HTML
<canvas id="canvas" width="400" height="400"></canvas>
JavaScript
function clock() {
var now = new Date();
var ctx = document.getElementById('canvas').getContext('2d');
ctx.save();
ctx.clearRect(0, 0, 500, 500);
ctx.translate(200, 200);
ctx.rotate(-Math.PI / 2);
ctx.strokeStyle = "#90b5db";
ctx.fillStyle = "black";
ctx.lineWidth = 8;
ctx.lineCap = "round";
//Fondo del reloj
ctx.save();
ctx.fillStyle = "#3e6c97";
ctx.beginPath();
ctx.arc(0, 0, 145, 0, Math.PI * 2, true);
ctx.fill();
ctx.restore();
//Horas
ctx.save();
for (var i = 0; i < 12; i++) {
ctx.beginPath();
ctx.rotate(Math.PI / 6);
ctx.arc(120, 0, 2, 0, Math.PI * 2, true);
ctx.stroke();
}
ctx.restore();
//Minutos
ctx.save();
ctx.lineWidth = 5;
for (i = 0; i < 60; i++) {
if (i % 5 != 0) {
ctx.beginPath();
ctx.arc(120, 0, 0.5, 0, Math.PI * 2, true);
ctx.stroke();
}
ctx.rotate(Math.PI / 30);
}
ctx.restore();
var sec = now.getSeconds();
var min = now.getMinutes();
var hr = now.getHours();
hr = hr >= 12 ? hr - 12 : hr;
ctx.fillStyle = "black";
//Mano de hora
ctx.save();
ctx.rotate(hr * (Math.PI / 6) + (Math.PI / 360) * min + (Math.PI / 21600) * sec)
ctx.lineCap = "butt";
ctx.strokeStyle = "#fff";
ctx.lineWidth = 12;
ctx.beginPath();
ctx.moveTo(-20, 0);
ctx.lineTo(80, 0);
ctx.stroke();
ctx.restore();
//Mano de minutos
ctx.save();
ctx.rotate((Math.PI / 30) * min + (Math.PI / 1800) * sec)
ctx.lineCap = "butt";
ctx.strokeStyle = "#fff";
ctx.lineWidth = 8;
ctx.beginPath();
ctx.moveTo(-28, 0);
ctx.lineTo(112, 0);
ctx.stroke();
ctx.restore();
//Mano de segundos
ctx.save();
ctx.rotate(sec * Math.PI / 30);
ctx.strokeStyle = "#fc6265";
ctx.fillStyle = "#fc6265";
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(-30, 0);
ctx.lineTo(110, 0);
ctx.stroke();
ctx.beginPath();
ctx.arc(0, 0, 10, 0, Math.PI * 2, true);
ctx.fill();
ctx.beginPath();
ctx.arc(120, 0, 10, 0, Math.PI * 2, true);
ctx.stroke();
...