canvs绘制动态时钟

34 篇文章 0 订阅
2 篇文章 0 订阅
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<canvas id='draw' width="200" height="200">A draw canvas</canvas>
		<script>
				
				
		let draw = document.getElementById('draw');
		let context = draw.getContext('2d');
		let angle =  Math.PI/360;
		var DateTime = {
					
						initDial: function(){
							context.save();
							context.beginPath();
							context.arc(100, 100, 99, 0, 2*Math.PI, false);
							
							context.moveTo(194, 100);
							
							context.arc(100, 100, 94, 0, 2*Math.PI ,false);
							
							//移动坐标原点,便于计算
							context.translate(100,100);
							context.moveTo(0,0);
								
							context.font = 'bold 14px Arial';
							context.textAlign = 'center';
							context.textBaseline = 'middle';
							//确定时刻的位置,根据相对的sin、cos、指针半径长度角度定
							let  cos60 = Math.cos(2*angle*60)*85;
							let  cos30 = Math.cos(2*angle*30)*85;
							
							let sin60 = Math.sin(2*angle*60)*85;
							let sin30 = Math.sin(2*angle*30)*85;
							
							context.fillText('12', 0, -85);
							context.fillText('1', cos60, -sin60);
							context.fillText('2', cos30, -sin30);
							
							
							context.fillText('3', 85, 0);				
							context.fillText('4', cos30, sin30);
							context.fillText('5', cos60, sin60);
			
							
							context.fillText('6', 0, 85);
							
							context.fillText('7',-cos60, sin60);
							context.fillText('8',-cos30, sin30);
							context.fillText('9', -85, 0);
							
							context.fillText('10', -cos30, -sin30);
							context.fillText('11', -cos60, -sin60);
							
							context.strokeStyle = '#4DB3FF';
										
							context.stroke();
							context.restore();
						},
					
						initmin: function(){
							let min = new Date().getMinutes();
//							console.log(min);
							context.save();
							context.beginPath();
							context.translate(100,100);
							context.moveTo(0,0);
						
							context.rotate(2 * Math.PI / 60 * min);
//							context.rotate(Math.PI/2);

							context.lineTo(0,-85);
							context.lineWidth = 2;
							context.stroke();
							context.restore();
						},
						inithour : function (){
							
							let hour = new Date().getHours();
							let min = new Date().getMinutes();
							context.save();
							context.beginPath();
							hour = hour>12 ? hour-12 : hour;
							context.translate(100,100)
							context.moveTo(0,0);
							//小时的弧度加上时间的偏移量
							context.rotate(2 * Math.PI / 12*hour + 2 * Math.PI /60 *min /12);
							context.lineTo(0, -65);
							context.lineWidth = 3;
							context.lineCap = 'round';
							context.stroke();
							context.restore();
						},
						initsec : function(){
							let sec = new Date().getSeconds();
							context.save();
//							console.log(sec);							
							context.beginPath();
							//移动坐标原点
							context.translate(100,100)
							context.rotate(2 * Math.PI / 60*sec);
							context.moveTo(-2, 0);							
							context.lineTo(2,0);
							context.lineTo(1,-90);
							context.lineTo(-1,-90);


							context.fillStyle = 'red';

							context.fill();
							context.restore();
						}
				}

				function autotime(){
				    context.clearRect(0, 0, context.canvas.width, context.canvas.height);
					DateTime.initDial();
					DateTime.inithour();
					DateTime.initmin();
					DateTime.initsec();
					clearTimeout(t);
					var t = setTimeout(function(){
						autotime()
					},1000)
				}				
				autotime();	

		</script>
	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的HTML5 Canvas绘制时钟的示例代码: ``` <!DOCTYPE html> <html> <head> <title>Canvas时钟</title> <style> canvas { border: 2px solid black; } </style> </head> <body> <canvas id="clock" width="200" height="200"></canvas> <script> function drawClock() { // 获取Canvas元素 var canvas = document.getElementById("clock"); var ctx = canvas.getContext("2d"); // 获取Canvas中心点坐标 var centerX = canvas.width / 2; var centerY = canvas.height / 2; // 绘制表盘 ctx.beginPath(); ctx.arc(centerX, centerY, 80, 0, 2 * Math.PI); ctx.strokeStyle = "black"; ctx.stroke(); // 绘制刻度 for (var i = 1; i <= 12; i++) { var angle = i * Math.PI / 6; var x = centerX + 60 * Math.sin(angle); var y = centerY - 60 * Math.cos(angle); ctx.beginPath(); ctx.arc(x, y, 5, 0, 2 * Math.PI); ctx.fillStyle = "black"; ctx.fill(); } // 绘制时针 var now = new Date(); var hour = now.getHours() % 12; var minute = now.getMinutes(); var second = now.getSeconds(); var hourAngle = (hour + minute / 60) * Math.PI / 6; var hourX = centerX + 40 * Math.sin(hourAngle); var hourY = centerY - 40 * Math.cos(hourAngle); ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo(hourX, hourY); ctx.strokeStyle = "black"; ctx.stroke(); // 绘制分针 var minuteAngle = minute * Math.PI / 30; var minuteX = centerX + 60 * Math.sin(minuteAngle); var minuteY = centerY - 60 * Math.cos(minuteAngle); ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo(minuteX, minuteY); ctx.strokeStyle = "black"; ctx.stroke(); // 绘制秒针 var secondAngle = second * Math.PI / 30; var secondX = centerX + 60 * Math.sin(secondAngle); var secondY = centerY - 60 * Math.cos(secondAngle); ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo(secondX, secondY); ctx.strokeStyle = "red"; ctx.stroke(); } // 每秒钟更新时钟 setInterval(drawClock, 1000); </script> </body> </html> ``` 这段代码使用Canvas绘制了一个时钟,并且每秒钟更新一次。你可以将代码复制到一个HTML文件中运行,就可以看到时钟的效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值