js 简易时钟

本文介绍了作者如何通过查阅资料和学习W3C上的canvas教程,动手实现了用JavaScript绘制一个时钟的示例代码。虽然代码存在重复,作者计划在未来进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

突然好奇js怎么画时钟,就查了下。然后再w3c 看到了 关于canvas的函数,然后就写了个这么挫的代码= = 。重复代码太多了。以后找机会优化下。



<!DOCTYPE html>
<html>
<head>
<title>试试</title>
<meta charset = "utf-8">
<script type="text/javascript">
	function draw(){
		var now = new Date();
        var sec = now.getSeconds();
        var min = now.getMinutes();
        var hour = now.getHours();
       	if(hour>12) hour -=12;
        hour += (min / 60);
		
		var canvas = document.getElementById('clock');
		var content = canvas.getContext('2d');
		content.clearRect(0, 0, canvas.width, canvas.height);
		
		//画圆圈
		
		content.beginPath();
		
		
		//arc(x,y,r,sAngle,eAngle,counterclockwise)
		//圆的横坐标 纵坐标,半径,起始角(弧度),结束角(弧度), 顺时针|逆时针
		content.arc(600,600,300,0,2*Math.PI);
		content.lineWidth = 15;
		content.strokeStyle= "black";//绘制的颜色
		content.stroke();//绘制已定义的路径

		content.closePath();

		//时刻
		for(var i = 0 ;i < 12;i++){
			content.save();

			content.translate(600,600);//设置原点
			content.rotate(30 * i * Math.PI / 180);// 每次将圆以圆心 为点 然后旋转 X ° 

			content.beginPath();

			//画直线路径, 相对于 圆心 的 坐标  来确定直线的长度
			content.moveTo(0,-270);
			content.lineTo(0,-300);

			content.lineWidth = 10;
			content.strokeStyle = "blue";
			content.stroke();

			content.closePath();
			//每画完一条线条 就返回画之前的状态
			content.restore();
		}

		//分钟
		for(var i = 0;i < 60;i++){
			content.save();

			content.translate(600,600);
			content.rotate(6 * i * Math.PI / 180);
			content.beginPath();

			content.moveTo(0,-280);
			content.lineTo(0,-300);

			content.lineWidth = 5;
			content.strokeStyle = "green";
			content.stroke();

			content.closePath();
			content.restore();
		}

		//时针
		content.save();
		content.translate(600,600);
		content.rotate(30 * hour * Math.PI / 180);
		content.beginPath();
		content.strokeStyle = "black";
		content.lineWidth = 10;
		content.moveTo(0,0);
		content.lineTo(0,-200);
		content.stroke();
		content.closePath();
		content.restore();
		// 分针
		content.save();
		content.translate(600,600);
		content.rotate(6 * min * Math.PI / 180);
		content.beginPath();
		content.strokeStyle = "blue";
		content.lineWidth = 7;
		content.moveTo(0,0);
		content.lineTo(0,-150);
		content.stroke();
		content.closePath();
		content.restore();
		//秒针
		content.save();
		content.translate(600,600);
		content.rotate(6 * sec * Math.PI / 180);
		content.beginPath();
		content.strokeStyle = "green";
		content.lineWidth = 5;
		content.moveTo(0,0);
		content.lineTo(0,-100);
		content.stroke();
		content.closePath();
		content.restore();

	}
	window.onload = draw;
	setInterval(draw,1000);
</script>
</head>
<body>
<canvas id="clock" width = "1000" height = "1000"></canvas>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值