Um relógio apenas com ponteiro dos minutos e segundos, com movimentos discretos. Cada segundo ou minuto corresponde a 6º. A animação tem um período de refrescamento de 1000ms.
As coordenadas do ponteiro dos segundos são atualizadas em cada disparo do relógio (função setInterval). O ponteiro do minutos só é atualizado quando o ponteiro dos segundos tem um ângulo múltiplo de 360º (ang2%360==0).
Visualização:
<!DOCTYPE html> <html> <head> <title>Gráfico</title> <meta charset="iso-8859-1"> <script type="text/javascript"> var r1 = 150; // extremidade dos minutos var p1 = 3600; // período dos minutos var r2 = 180; // extremidade dos segundos var p2 = 60; // período dos segundos. var ang1=0, ang2=0; // ângulos dos ponteiros no momento atual var delta1=6, delta2=6; // incrementos nos ângulos dos ponteiros em // cada chamada da função anima() var x0 = 300; // coordenadas do centro do relógio - fixas var y0 = 200; var ctx; function init() { var c = document.getElementById("cvs"); ctx = c.getContext("2d"); larg = eval( c.getAttribute("width") ); alt = eval( c.getAttribute("height") ); var periodoRelogio = 1000; setInterval("anima()", periodoRelogio); } function anima() { // Segundos ang2 += delta2; x2 = r2 * Math.cos((ang2-90)*Math.PI/180) + x0; y2 = r2 * Math.sin((ang2-90)*Math.PI/180) + y0; // Minutos if(ang2 % 360 == 0) ang1 += delta1; x1 = r1 * Math.cos((ang1-90)*Math.PI/180) + x0; y1 = r1 * Math.sin((ang1-90)*Math.PI/180) + y0; // Desenhar ctx.fillStyle = "black"; ctx.beginPath(); ctx.rect(0,0,larg,alt); ctx.fill(); ctx.fillStyle = "#FFFF20"; ctx.beginPath(); ctx.arc(x0,y0,10,0,2*Math.PI); ctx.fill(); ctx.fillStyle = "#8080FF"; ctx.beginPath(); ctx.arc(x1,y1,5,0,2*Math.PI); ctx.fill(); poeLinha(x0,y0,x1,y1,"#8080FF"); ctx.fillStyle = "white"; ctx.beginPath(); ctx.arc(x2,y2,3,0,2*Math.PI); ctx.fill(); poeLinha(x0,y0,x2,y2,"white"); } function poeLinha(x1,y1,x2,y2,cor) { ctx.strokeStyle = cor; ctx.beginPath(); ctx.moveTo(x1,y1); ctx.lineTo(x2,y2); ctx.stroke(); } </script> </head> <body onload="init();"> <canvas width="600" height="400" id="cvs"></canvas> </body> </html>