Menù

Top 5

Orologio analogico javascript

Segnalo un ottimo tutorial su w3schools.com per creare un orologio analogico all'interno del tag

dell'html5.


Di seguito il codice html

<canvas id="canvas" width="250" height="250"></canvas>

e il codice javascript

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    var radius = canvas.height / 2;
    ctx.translate(radius, radius);
    radius *= 0.90;
    setInterval(drawClock, 1000);

    function drawClock() {
	   drawFace(ctx, radius);
	   drawNumbers(ctx, radius);
	   drawTime(ctx, radius);
    }

    function drawFace(ctx, radius) {
	   ctx.beginPath();
	   ctx.arc(0, 0, radius, 0, 2 * Math.PI);
	   ctx.fillStyle = 'white';
	   ctx.fill();

	   var gradient;
	   gradient = ctx.createRadialGradient(0, 0, radius * 0.95, 0, 0, radius * 1.05);
	   gradient.addColorStop(0, '#053E85');
	   gradient.addColorStop(1, 'white');
	   ctx.strokeStyle = gradient;
	   ctx.lineWidth = radius * 0.1;
	   ctx.stroke();

	   ctx.beginPath();
	   ctx.arc(0, 0, radius * 0.05, 0, 2 * Math.PI);
	   ctx.fillStyle = '#053E85';
	   ctx.fill();

	   ctx.textBaseline = "middle";
	   ctx.textAlign = "center";
	   ctx.font = "bold " + radius * 0.12 + "px courier";
	   ctx.fillText("CRIRIC", 0, 30);
    }
    function drawNumbers(ctx, radius) {

	   var ang, num, w, h;

	   for (num = 1; num < 61; num++) {
		  ang = num * Math.PI / 30;
		  ctx.rotate(ang);
		  ctx.translate(0, -radius * 0.85);
		  if (num % 15 == 0) {
			 w = 7;
			 h = 4;
		  } else if (num % 5 == 0) {
			 w = 5;
			 h = 2;
		  } else {
			 w = 2;
			 h = 0.8;
		  }
		  ctx.beginPath();
		  ctx.rect(0, 0, h, w);
		  ctx.fillStyle = '#053E85';
		  ctx.fill();
		  ctx.translate(0, radius * 0.85);
		  ctx.rotate(-ang);
	   }
    }
    function drawTime(ctx, radius) {
	   var now = new Date();
	   var hour = now.getHours();
	   var minute = now.getMinutes();
	   var second = now.getSeconds();
	   //hour
	   hour = hour % 12;
	   hour = (hour * Math.PI / 6) + (minute * Math.PI / (6 * 60)) + (second * Math.PI / (360 * 60));
	   drawHand(ctx, hour, radius * 0.5, radius * 0.04);
	   //minute
	   minute = (minute * Math.PI / 30) + (second * Math.PI / (30 * 60));
	   drawHand(ctx, minute, radius * 0.75, radius * 0.04);
	   // second
	   second = (second * Math.PI / 30);
	   drawHand(ctx, second, radius * 0.85, radius * 0.02);
    }

    function drawHand(ctx, pos, length, width) {
	   ctx.beginPath();
	   ctx.strokeStyle = '#053E85';
	   ctx.lineWidth = width;
	   ctx.lineCap = "round";
	   ctx.moveTo(0, 0);
	   ctx.rotate(pos);
	   ctx.lineTo(0, -length);
	   ctx.stroke();
	   ctx.rotate(-pos);
    }

Il codice è ampiamente commentato e spiegato sul sito dell'autore.

criric

Mi sono appassionato di programmazione web a 34 anni, un pò tardi, da allora però non perdo mai occasione per imparare qualcosa di nuovo in questi campi.

Javascript - Html - Css - Php - Mysql

Inserisci un commento

Codice antispam

Categorie

Comunicazioni

Puoi utilizzare questo modulo per qualsiati tipo di segnalazione.

Codice antispam

 

I dati di questo modulo non verranno pubblicati.