canvas绘制动态时钟

10 篇文章 0 订阅
3 篇文章 0 订阅
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			#mycanvas{
				position: absolute;
				left:50%;
				margin-left:-250px;
				border:5px solid #fff;
				box-shadow: 0 0 10px rgba(0,0,0,0.2);
				background-color: rgb(58, 179, 255);
			}
		</style>
	</head>
	<body>
		<!--
			canvas:html5新增的画布对象,可以在其中绘制任何的图形,以及线条效果,包括图片
			注意canvas的尺寸应该通过元素的属性直接设置,而不是使用样式实现(失帧)
		-->
		<canvas id="mycanvas" width="500px" height="500px">您的浏览器太low了,请切换</canvas>
		<script>
			//获取画布对象
			var mycanvas = document.getElementById('mycanvas');
			//获取一个2d绘图环境(拿到一支画笔)
			var ctx = mycanvas.getContext('2d');
			
		function draw(){
	
			//获取系统时间
			var nowTime = new Date();
			var hours = nowTime.getHours();//获取时
			var minutes = nowTime.getMinutes();//获取分
			var seconds = nowTime.getSeconds();//获取秒
			
			//防止小时超过12
			hours = hours > 12 ? hours-12 : hours;
			//精准设置小时值 
			hours = hours + minutes/60;  
	
			//清除画布(防止覆盖)
			ctx.clearRect(0,0,500,500);
	
			//初始化画笔的样式
			ctx.lineWidth = 5;	//设置线条的宽度
			ctx.strokeStyle = '#fff'; //设置线条颜色
			
			ctx.beginPath();//开始新的绘图路径
			//设置一个圆形路径
			ctx.arc(250,250,150,0,360,false);
			//绘制图形
			ctx.stroke();
			ctx.closePath();//结束当前绘图路径
			
			//绘制刻度(时刻度)
			for(var i = 0;i < 12;i++){
				ctx.beginPath();
				ctx.lineWidth = 10;
				//保存当前绘图环境
				ctx.save();
				//重置绘制起始位置(将圆心位置重置为0,0)
				ctx.translate(250,250);
				//旋转画布到一定的弧度    弧度=角度*PI/180
				ctx.rotate(i * 30 * Math.PI / 180);
				//设置绘制线条的起始位置
				ctx.moveTo(0,140);
				//设置线条的结束位置
				ctx.lineTo(0,150);
				//绘制路径
				ctx.stroke();
				//还原初始的绘图环境
				ctx.restore();
				ctx.closePath();
			}
			
			//绘制刻度(分刻度)
			for(var i = 0;i < 60;i++){
				ctx.beginPath();
				ctx.lineWidth = 3;
				//保存当前绘图环境
				ctx.save();
				//重置绘制起始位置(将圆心位置重置为0,0)
				ctx.translate(250,250);
				//旋转画布到一定的弧度    弧度=角度*PI/180
				ctx.rotate(i * 6 * Math.PI / 180);
				//设置绘制线条的起始位置
				ctx.moveTo(0,142);
				//设置线条的结束位置
				ctx.lineTo(0,146);
				//绘制路径
				ctx.stroke();
				//还原初始的绘图环境
				ctx.restore();
				ctx.closePath();
			}
			
			/*绘制时针*/
			ctx.beginPath();
			ctx.lineWidth = 5;
			//保存当前绘图环境
			ctx.save();
			//重置绘制起始位置(将圆心位置重置为0,0)
			ctx.translate(250,250);
			//旋转画布到一定的弧度    弧度=角度*PI/180
			ctx.rotate(hours * 30 * Math.PI / 180);
			//设置绘制线条的起始位置
			ctx.moveTo(0,10);
			//设置线条的结束位置
			ctx.lineTo(0,-100);
			//绘制路径
			ctx.stroke();
			//还原初始的绘图环境
			ctx.restore();
			ctx.closePath();
			
			/*绘制分针*/
			ctx.beginPath();
			ctx.lineWidth = 3;
			//保存当前绘图环境
			ctx.save();
			//重置绘制起始位置(将圆心位置重置为0,0)
			ctx.translate(250,250);
			//旋转画布到一定的弧度    弧度=角度*PI/180
			ctx.rotate(minutes * 6 * Math.PI / 180);
			//设置绘制线条的起始位置
			ctx.moveTo(0,10);
			//设置线条的结束位置
			ctx.lineTo(0,-120);
			//绘制路径
			ctx.stroke();
			//还原初始的绘图环境
			ctx.restore();
			ctx.closePath();
			
			
			/*绘制秒针*/
			ctx.beginPath();
			ctx.lineWidth = 1;
			ctx.strokeStyle = '#f00';
			//保存当前绘图环境
			ctx.save();
			//重置绘制起始位置(将圆心位置重置为0,0)
			ctx.translate(250,250);
			//旋转画布到一定的弧度    弧度=角度*PI/180
			ctx.rotate(seconds * 6 * Math.PI / 180);
			//设置绘制线条的起始位置
			ctx.moveTo(0,10);
			//设置线条的结束位置
			ctx.lineTo(0,-135);
			//绘制路径
			ctx.stroke();
			//还原初始的绘图环境
			ctx.restore();
			ctx.closePath();
		}
		
		setInterval(draw,1000);
		
		</script>
	</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值