JS实现时钟操作

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>时钟制作</title>
		<style type="text/css">
			canvas{
				border: solid 1px red;
			}
		</style>
	</head>
	<body>
		<canvas id="can" width="800" height="600"></canvas>
	</body>
	<script type="text/javascript">
		var can=document.getElementById("can");
		var ctx=can.getContext("2d");
		
		function clock(){
			var date=new Date();
			var h=date.getHours()%12;
			var m=date.getMinutes();
			var s=date.getSeconds();
			var ms=date.getMilliseconds();
			h=h+m/60;
			m=m+s/60;
			s=s+ms/1000;
			ctx.clearRect(0,0,800,600);//在给定区域内清空像素
			ctx.save();//保存当前图像状态的一份拷贝
			ctx.translate(250,250);//重新映射画布上的(0,0)位置
			
			ctx.beginPath();
			ctx.lineWidth=20;
			ctx.strokeStyle="black";
			
			ctx.arc(0,0,220,0,2*Math.PI);//圆半径为220
			ctx.closePath();
			ctx.stroke();//绘制
			
			//绘制小时刻度
			ctx.save();
			for(var i=0;i<12;i++)
			{
				ctx.lineWidth=6;
				ctx.rotate(2*Math.PI/12);//旋转画布中的元素
				ctx.moveTo(0,-190);//开始一条路径
				ctx.lineTo(0,-170);//添加一个新点
				ctx.stroke();
			}
			ctx.restore();//从栈中弹出的图形状态并恢复对象的属性、剪切路径和变换矩阵的值
			//绘制分钟刻度
			ctx.save();
			for(var i=0;i<60;i++)
			{
				ctx.lineWidth=2;
				ctx.rotate(2*Math.PI/60);//旋转画布中的元素
				ctx.moveTo(0,-190);//开始一条路径
				ctx.lineTo(0,-180);//添加一个新点
				ctx.stroke();
			}
			ctx.restore();
			//绘制数字
			ctx.save();
			for(var i=1;i<=12;i++)
			{
				ctx.beginPath();
				ctx.lineWidth=8;
				ctx.strokeStyle="black";
				ctx.font="30px 宋体";
				ctx.textAlign="center";
				ctx.textBaseline="middle";
				//ctx.rotate(2*Math.PI/12);//旋转画布中的元素
				var rad=2*Math.PI/12*i;
				var x=Math.sin(rad)*150;
				var y=Math.cos(rad)*150;
				ctx.fillText(i,x,-y);
				ctx.closePath();
				ctx.stroke();
			}
			ctx.restore();
			//绘制时针
			ctx.save();
			ctx.beginPath();
			ctx.lineWidth=8;
			ctx.strokeStyle="black";
			ctx.rotate(h*2*Math.PI/12);
			ctx.moveTo(0,20);
			ctx.lineTo(0,-120);
			ctx.closePath();
			ctx.stroke();
			ctx.restore();
			//绘制分针
			ctx.save();
			ctx.beginPath();
			ctx.lineWidth=6;
			ctx.strokeStyle="gray";
			ctx.rotate(m*2*Math.PI/60);
			ctx.moveTo(0,30);
			ctx.lineTo(0,-130);
			ctx.closePath();
			ctx.stroke();
			ctx.restore();
			//绘制秒针
			ctx.save();
			ctx.beginPath();
			ctx.lineWidth=4;
			ctx.strokeStyle="indianred";
			ctx.rotate(s*2*Math.PI/60);
			ctx.moveTo(0,50);
			ctx.lineTo(0,-150);
			ctx.closePath();
			ctx.stroke();
			ctx.restore();
			//绘制小圆圈
			ctx.beginPath();
			ctx.lineWidth=4;
			ctx.arc(0,0,4,0,2*Math.PI);
			ctx.closePath();
			ctx.strokeStyle="#FF0000";
			ctx.stroke();
			ctx.restore();
			
			
			
		}
		
		setInterval(clock,10);
	</script>
</html>

实现结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值