Maison >interface Web >Tutoriel H5 >Introduction détaillée du composant HTML5 Canvas pour implémenter le code graphique et textuel de l'horloge électronique

Introduction détaillée du composant HTML5 Canvas pour implémenter le code graphique et textuel de l'horloge électronique

黄舟
黄舟original
2017-03-03 16:24:221522parcourir

Idée de base :

Dessinez d'abord un fond rectangulaire et définissez la couleur sur gris. Dessinez une simple bordure extérieure rectangulaire sur l'arrière-plan, puis dessinez

une bordure intérieure, puis chargez l'image sélectionnée comme image d'arrière-plan à l'intérieur de l'horloge électronique. Ensuite, commencez à dessiner l'échelle de l'horloge,

dessinez l'échelle des minutes, et enfin obtenez l'heure actuelle du système et dessinez trois poignées pour les heures, les minutes et les secondes.

Points techniques :

Utilisez le Canvas 2D de HTML5 pour dessiner des objets, principalement en utilisant les méthodes context.save() et context.restore() pour enregistrer

Dessinez l'état et réinitialisez l'état de dessin, utilisez les méthodes Transform et fillRect() pour dessiner l'horloge et l'échelle des minutes. Utilisez la méthode

drawImage() pour dessiner l'image d'arrière-plan et utilisez la méthode setTimeout() pour actualiser l'affichage de l'heure.

Explication détaillée du code :

Le code pour obtenir l'objet de dessin HTML5 Canvas est le suivant :

var canvas = document.getElementById("canvas1");
ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, 500, 500);

Le code pour dessiner l'échelle de l'horloge est le suivant :

		    var sin = Math.sin(Math.PI/6);  
		    var cos = Math.cos(Math.PI/6); 
		    ctx.translate(245, 245);
		    for (var i=0; i <= 12; i++) {  
		    	// top
				ctx.fillRect(160,-7.5,30,10);
				ctx.strokeRect(160,-7.5,30,10);
				ctx.transform(cos, sin, -sin, cos, 0, 0);  	
		    }

Le code pour dessiner l'échelle des minutes et des minutes est le suivant :

		    var sin = Math.sin(Math.PI/30);  
		    var cos = Math.cos(Math.PI/30); 
		    for (var i=0; i <= 60; i++) {  
				ctx.fillRect(170,-5,10,2);
				ctx.transform(cos, sin, -sin, cos, 0, 0); 	
		    }

Enregistrer Le code d'état de production est le suivant :

ctx.translate(245, 245);
ctx.save();

Le code d'état du dessin de récupération est le suivant :

ctx.restore();

L'effet de l'opération est le suivant :


Le code source complet du programme est comme suit :



<script>
	window.onload = function() {
		clockHand();
	};
	
	function clockHand() {
		var canvas = document.getElementById("canvas1");
		ctx = canvas.getContext("2d");
		ctx.clearRect(0, 0, 500, 500);
		
		// create background rectangle
		// ctx.lineWidth = 10;  
		ctx.fillStyle = "gray";
		ctx.fillRect(0,0,500,500);
		
		// draw frame
		ctx.lineWidth = 10;  
		ctx.strokeStyle = "green";
		ctx.strokeRect(0,0,500,500);
		
		// draw author infomation
		ctx.fillStyle = "blue";
		ctx.font = "20px Times New Roman";
		ctx.fillText("-created by gloomyfish", 150, 30);
		
		// draw inner rectangle
		ctx.lineWidth = 10;  
		ctx.strokeStyle = "black";
		ctx.strokeRect(45,45,400,400);
		
		// create background image
		var img=new Image();
		img.src="background.png";
		img.onload = function() { 
		    ctx.drawImage(img,45,45,400,400);
		    ctx.save();
			// draw marker unit
			ctx.lineWidth = 2;
		    ctx.fillStyle = "purple";
		    ctx.strokeStyle = "black";
		    var sin = Math.sin(Math.PI/6);  
		    var cos = Math.cos(Math.PI/6); 
		    ctx.translate(245, 245);
		    for (var i=0; i &lt;= 12; i++) {  
		    	// top
				ctx.fillRect(160,-7.5,30,10);
				ctx.strokeRect(160,-7.5,30,10);
				ctx.transform(cos, sin, -sin, cos, 0, 0);  	
		    }
		    
		    // transform back center point
		    
		    // ctx.translate(245, 245);
		    var sin = Math.sin(Math.PI/30);  
		    var cos = Math.cos(Math.PI/30); 
		    for (var i=0; i &lt;= 60; i++) {  
				ctx.fillRect(170,-5,10,2);
				ctx.transform(cos, sin, -sin, cos, 0, 0); 	
		    }
		    ctx.restore();
		    // top
			ctx.fillText("12", 233,100);
			
			// bottom
			ctx.fillText("6", 240,400);
			
			// left
			ctx.fillText("9", 90,252);
			
			// right
			ctx.fillText("3", 395,250);
			
			// get time
			ctx.save();
			ctx.translate(245, 245);
			ctx.save();
			
			// dynamic show time
			var now=new Date();
			var hrs=now.getHours();
			var min=now.getMinutes();
			var sec=now.getSeconds();

			//Draw hour hand
			ctx.rotate(Math.PI/6*(hrs+(min/60)+(sec/3600)));
			ctx.beginPath();
			ctx.moveTo(0,10);
			ctx.lineTo(0,-60);
			ctx.stroke();
			ctx.restore();
			ctx.save();
			
			//Draw minute hand
			ctx.rotate(Math.PI/30*(min+(sec/60)));
			ctx.beginPath();
			ctx.moveTo(0,20);
			ctx.lineTo(0,-110);
			ctx.stroke();
			ctx.restore();
			ctx.save();
			
			//Draw second hand
			ctx.rotate(Math.PI/30*sec);
			ctx.strokeStyle="#E33";
			ctx.lineWidth = 2;
			ctx.beginPath();
			ctx.moveTo(0,20);
			ctx.lineTo(0,-110);
			ctx.stroke();
			ctx.restore();
			
			// finally store to originall point
			ctx.restore();
			setTimeout(clockHand,1000);
		};
	}
</script>


	electronic clock

Défauts :

Il n'est pas bon d'actualiser et de charger l'objet image à chaque fois que je l'ai testé dans le navigateur Google. Il est recommandé d'exécuter le code ci-dessus dans le

navigateur Google.

Ce qui précède est l'introduction détaillée du code graphique et textuel du composant HTML5 Canvas pour implémenter l'horloge électronique. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn