canvas实现动态时钟

HTML5之前,为了达到页面绚丽多彩的效果,我们很多情况下都是借助“图片”来实现。不过使用图片这种方式,都是以“ ”低性能为代价的。由于图片体积大、下载速度慢等原因,因此为了应对日渐复杂的Web应用开发,W3C在HTML5标准中引入了Canvas这一门技术。
Canvas又称为“画布”,是HTML5的核心技术之一。我们常说的Canvas技术,指的就是使用Canvas元素结合JavaScript来绘制各种图形的技术。
Canvas是基于“位图”的,适用于像素处理和动态渲染,图形放大会影响质量。SVG是基于“矢量”的,不适于像素处理和静态描述,图形放大不会影响智力。也就是说,使用Canvas绘制出来的是一个“位图”,而使用SVG绘制出来的是一个“矢量图。

绘制动态时钟

首先是画布

<body>
<canvas id="canvas" width="600" height="600"></canvas>
</body>
<script>
		var canvas = document.getElementById("canvas");
		var context = canvas.getContext("2d");

</script>

绘制表盘

context.beginPath();
			context.lineWidth = 10;
			context.arc(300, 300, 200, 0, 2 * Math.PI, false);
			context.strokeStyle = "aquamarine";
			context.stroke();
			context.closePath();

绘制刻度


//刻度
			//时
			for(var i = 0; i < 12; i++) {
				//用到异次元画法
				context.save();
				context.beginPath();
				//重新设置0,0点
				context.translate(300, 300);
				//旋转角度
				context.rotate(i * 30 * Math.PI / 180);
				context.moveTo(0, -200);
				context.lineTo(0, -180);
				context.stroke();
				context.closePath();
				//异次元的东西  塞回来
				context.restore();
			}
			//分刻度
			for(var i = 0; i < 60; i++) {
				//用到异次元画法
				context.save();
				context.beginPath();
				//重新设置0,0点
				context.translate(300, 300);
				//旋转角度
				context.rotate(i * 6 * Math.PI / 180);
				context.moveTo(0, -200);
				context.lineTo(0, -185);
				context.lineWidth = 8;
				context.stroke();
				context.closePath();
				//异次元的东西  塞回来
				context.restore();
			}

			//时针
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(hour * 30 * Math.PI / 180);
			context.moveTo(0, 0);
			context.lineTo(0, -100);
			context.lineWidth = 8;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

			//分针
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(min * 6 * Math.PI / 180);
			context.moveTo(0, 10);
			context.lineTo(0, -130);
			context.lineWidth = 5;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

			//秒钟
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(sec * 6 * Math.PI / 180);
			context.moveTo(0, 15);
			context.lineTo(0, -150);
			context.lineWidth = 3;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

绘制表心

			context.beginPath();
			context.lineWidth = 10;
			context.arc(300, 300, 10, 0, 2 * Math.PI, false);
			context.fillStyle = "white";
			context.fill();
			context.closePath();

对当前的时间进行获取

			context.clearRect(0,0,600,600);
			//在画所有的东西之前都要去取到当前的时间
			var now = new Date();
			var hour = now.getHours();
			var min  = now.getMinutes();
			var sec  = now.getSeconds();
			hour = hour+min/60
			if(hour >12){
				hour = hour -12;
			}

计时器的运用

var timer = setInterval(show,1000)

源码为

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#canvas {
				/*border: 1px solid red;*/
				display: block;
				margin: 0 auto;
			}
		</style>
	</head>

	<body bgcolor="black">
		
		<canvas id="canvas" width="600" height="600"></canvas>
	</body>
	<script type="text/javascript">
		var canvas = document.getElementById("canvas");

		var context = canvas.getContext("2d");

		function show() {
			context.clearRect(0,0,600,600);
			//在画所有的东西之前都要去取到当前的时间
			var now = new Date();
			var hour = now.getHours();
			var min  = now.getMinutes();
			var sec  = now.getSeconds();
			hour = hour+min/60
			if(hour >12){
				hour = hour -12;
			}
			
			//表盘
			context.beginPath();
			context.lineWidth = 10;
			context.arc(300, 300, 200, 0, 2 * Math.PI, false);
			context.strokeStyle = "aquamarine";
			context.stroke();
			context.closePath();

			//刻度
			//时
			for(var i = 0; i < 12; i++) {
				//用到异次元画法
				context.save();
				context.beginPath();
				//重新设置0,0点
				context.translate(300, 300);
				//旋转角度
				context.rotate(i * 30 * Math.PI / 180);
				context.moveTo(0, -200);
				context.lineTo(0, -180);
				context.stroke();
				context.closePath();
				//异次元的东西  塞回来
				context.restore();
			}
			//分刻度
			for(var i = 0; i < 60; i++) {
				//用到异次元画法
				context.save();
				context.beginPath();
				//重新设置0,0点
				context.translate(300, 300);
				//旋转角度
				context.rotate(i * 6 * Math.PI / 180);
				context.moveTo(0, -200);
				context.lineTo(0, -185);
				context.lineWidth = 8;
				context.stroke();
				context.closePath();
				//异次元的东西  塞回来
				context.restore();
			}

			//时针
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(hour * 30 * Math.PI / 180);
			context.moveTo(0, 0);
			context.lineTo(0, -100);
			context.lineWidth = 8;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

			//分针
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(min * 6 * Math.PI / 180);
			context.moveTo(0, 10);
			context.lineTo(0, -130);
			context.lineWidth = 5;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

			//秒钟
			context.beginPath();
			context.save();
			//重新设置0,0点
			context.translate(300, 300);
			//旋转角度
			context.rotate(sec * 6 * Math.PI / 180);
			context.moveTo(0, 15);
			context.lineTo(0, -150);
			context.lineWidth = 3;
			context.stroke();
			context.closePath();
			//异次元的东西  塞回来
			context.restore();

			//表心
			context.beginPath();
			context.lineWidth = 10;
			context.arc(300, 300, 10, 0, 2 * Math.PI, false);
			context.fillStyle = "white";
			context.fill();
			context.closePath();
		}
		var timer = setInterval(show,1000)
	</script>

</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、付费专栏及课程。

余额充值