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();
 ...