用canvas绘制时钟

canvas是h5新增的元素,下面我们开学习一下怎样用canvas绘制一个时钟

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	<style>
			
			canvas{
				border:1px solid #000000;
			}
		</style>
	</head>
	<body>
		<canvas id="can" width="500" height="500"></canvas>
	</body>
	<script type="text/javascript">
		var can=document.getElementById('can');
		var ctx=can.getContext('2d');
		
	
		function shijian(){
	    ctx.clearRect(0,0,500,500);
		
		//表盘
		ctx.save();
		ctx.beginPath();
		ctx.lineWidth=5;
		ctx.arc(250,250,100,0,Math.PI*2);
		ctx.stroke();
		ctx.closePath();
		ctx.restore();
	
		
		//刻度
        for(var i=0;i<60;i++){
        ctx.save();
		ctx.translate(250,250);
		ctx.rotate(i*Math.PI/30);
		ctx.beginPath();
		if(i%5==0){
			ctx.moveTo(0,-100);
		    ctx.lineTo(0,-85); 	
		    ctx.lineWidth =5;
		}
		else{
			ctx.moveTo(0,-100);
		    ctx.lineTo(0,-90); 	
		    ctx.lineWidth =2;
		}
		ctx.closePath();
		ctx.stroke();
		ctx.restore();
      }
		//获取时间
	
		var time=new Date();
		var hours=time.getHours();
		var min=time.getMinutes();
		var sec=time.getSeconds();
		var hour=hours-12>0?hours-12:hours;
	
		
		//时针
		
		ctx.save();
		ctx.translate(250,250);
		ctx.rotate((hour+min/60)*Math.PI/6);
		ctx.beginPath();
		ctx.moveTo(0,0);
		ctx.lineTo(0,-50); 	
		ctx.lineWidth=6;
		ctx.stroke();
		ctx.closePath();
		ctx.restore();
		//分针
		ctx.save();
		ctx.translate(250,250);
		ctx.rotate((min+sec/60)*Math.PI/60);
		ctx.beginPath();
		ctx.moveTo(0,0);
		ctx.lineTo(0,-70); 	
		ctx.lineWidth=4;
		ctx.stroke();
		ctx.closePath();
		ctx.restore();
		//秒针
		ctx.save();
		ctx.translate(250,250);
		ctx.rotate(sec*Math.PI/30);
		ctx.beginPath();
		ctx.moveTo(0,0);
		ctx.lineTo(0,-80); 	
		ctx.lineWidth=2;
		ctx.stroke();
		ctx.closePath();
		ctx.restore();
		//圆心
		ctx.save();
		ctx.translate(250,250);
		ctx.beginPath();
		ctx.arc(0,0,5,0,Math.PI*2);
		ctx.fillStyle='blue';
		ctx.fill();
		ctx.closePath();
		ctx.restore();
		//字体
	    ctx.save();
		ctx.translate(250,250);
	    ctx.font="20px Arial";
		ctx.textAlign='center';
		ctx.fillText("天明城",0,-60);
        ctx.restore();
		
}
shijian();
setInterval(shijian,1000);
</script>
</html>

效果如下

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的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文件中运行,就可以看到时钟的效果了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值