html语言中钟表怎么做,html5制作一个时钟(示例代码)

试着用html5写一个时钟

记得开始这个随笔是几天前,一直保存在草稿里面,一直感觉有个东西搁在在那里,所以今天熬夜也要写完这篇博客!!!哈哈...不多说来上代码和思路。

---------------------------------------------------------------------------------------------

其实并不难,主要看你是否掌握了canvas下面几个属性:save(),restore();ratate();translate(),moveTo(),lineTo();beginPath();requestAnimationFrame();在开始看下面的代码的时候最好先弄清楚这些方法的原理和作用,另外canvas有个重要特性:canvas是基于状态的绘制,所以每次旋转都是接着上次旋转的基础上继续旋转,所以在使用图形变换的时候必须搭配save()与restore()方法.

好了,开始代码,先开始画12个小时和60分钟的线条(一些需要步骤在代码有注释):

1 functionrotateFun(){2 var now= new Date();//获取当前时间对象,对以后指针旋转很重要

3

4 var ctx=document.getElementById("canvas").getContext("2d");//取的画布环境

5

6 ctx.clearRect(0,0,800,600);//在开始之前都要清空画布,因为不清空就会所有的痕迹在画布上显示

7

8 ctx.save();//第一个保存状态

9 ctx.fillStyle=‘rgba(20,20,20,0.2)‘;10 ctx.fillRect(0,0,800,600);11 ctx.translate(400,300);//平移画布中心到中心

12

13 //画12个小时

14 ctx.save();15 for (var i = 0; i < 12; i++) {16 ctx.strokeStyle=‘black‘;17 ctx.rotate(2*Math.PI/12);

18 ctx.moveTo(120,0);19 ctx.lineTo(100,0);20 ctx.lineWidth=8;21 ctx.stroke();22 }23 ctx.restore();24

25 //画60个分钟

26 ctx.save();27 for (var i = 0; i <60 ;i++) {28 ctx.strokeStyle=‘black‘;29 ctx.rotate(2*Math.PI/60);

30 ctx.moveTo(115,0);31 ctx.lineTo(105,0);32 ctx.lineWidth=2;33 ctx.stroke();34 }35 ctx.restore();36

37 ctx.restore()38

39 }

-----------------------------------------------------------------------

静态完了就是动态的,指针随着时间而走动.这里指针走的原理是:每一帧调用后都是重新画的一个画布,里面的指针,12个小时和60分钟的线条都是新的,只是下一秒后就物是人非,整个画布就转了某个角度,但是指针相对画布还是静止没有变过的,所以我们的眼睛就会产生了指针随着时间走的效果,另外就是指针指在当前时间都是参数控制的,代买如下:

var hour=now.getHours();var min=now.getMinutes();var sec=now.getSeconds();//画秒针

ctx.save();

ctx.beginPath();

ctx.rotate(sec*Math.PI/30);

ctx.strokeStyle=‘black‘;

ctx.lineWidth=4;

ctx.moveTo(0,30);

ctx.lineTo(0,-112);

ctx.stroke();

ctx.closePath();

ctx.restore();//画分钟

ctx.save();

ctx.beginPath();

ctx.rotate(min*Math.PI/30+sec*Math.PI/1800);

ctx.strokeStyle=‘black‘;

ctx.lineWidth=6;

ctx.moveTo(0,28);

ctx.lineTo(0,-83);

ctx.stroke();

ctx.closePath();

ctx.restore();//画时钟

ctx.save();

ctx.beginPath();

ctx.rotate(hour*Math.PI/6+min*Math.PI/360+sec*Math.PI/21600);

ctx.strokeStyle=‘black‘;

ctx.lineWidth=8;

ctx.moveTo(0,26);

ctx.lineTo(0,-63);

ctx.stroke();

ctx.closePath();

ctx.beginPath();

ctx.strokeStyle=‘blue‘;

ctx.arc(0,0,126,0,2*Math.PI);

ctx.stroke();

ctx.closePath();

ctx.restore();

ctx.restore();

------------------------------------------------------------

好了,知道了这些原理:给出完整的代码,这些代码还有优化改进的地方:

1

2

3

4

5

rotate

6

7

8

9

10 functionrotateFun(){11 var now= new Date();//获取当前时间对象,对以后指针旋转很重要

12

13 var ctx=document.getElementById("canvas").getContext("2d");//取的画布环境

14

15 ctx.clearRect(0,0,800,600);//在开始之前都要清空画布,因为不清空就会所有的痕迹在画布上显示

16

17 ctx.save();//第一个保存状态

18 ctx.fillStyle=‘rgba(20,20,20,0.2)‘;19 ctx.fillRect(0,0,800,600);20 ctx.translate(400,300);//平移画布中心到中心

21

22 //画12个小时

23 ctx.save();24 for (var i = 0; i < 12; i++) {25 ctx.strokeStyle=‘black‘;26 ctx.rotate(2*Math.PI/12);

27 ctx.moveTo(120,0);28 ctx.lineTo(100,0);29 ctx.lineWidth=8;30 ctx.stroke();31 }32 ctx.restore();33

34 //画60个分钟

35 ctx.save();36 for (var i = 0; i <60 ;i++) {37 ctx.strokeStyle=‘black‘;38 ctx.rotate(2*Math.PI/60);

39 ctx.moveTo(115,0);40 ctx.lineTo(105,0);41 ctx.lineWidth=2;42 ctx.stroke();43 }44 ctx.restore();45

46 var hour=now.getHours();47 var min=now.getMinutes();48 var sec=now.getSeconds();49

50 //画秒针

51 ctx.save();52 ctx.beginPath();53 ctx.rotate(sec*Math.PI/30);

54 ctx.strokeStyle=‘black‘;55 ctx.lineWidth=4;56 ctx.moveTo(0,30);57 ctx.lineTo(0,-112);58 ctx.stroke();59 ctx.closePath();60 ctx.restore();61

62 //画分钟

63 ctx.save();64 ctx.beginPath();65 ctx.rotate(min*Math.PI/30+sec*Math.PI/1800);66 ctx.strokeStyle=‘black‘;67 ctx.lineWidth=6;68 ctx.moveTo(0,28);69 ctx.lineTo(0,-83);70 ctx.stroke();71 ctx.closePath();72 ctx.restore();73

74 //画时钟

75 ctx.save();76 ctx.beginPath();77 ctx.rotate(hour*Math.PI/6+min*Math.PI/360+sec*Math.PI/21600);

78 ctx.strokeStyle=‘black‘;79 ctx.lineWidth=8;80 ctx.moveTo(0,26);81 ctx.lineTo(0,-63);82 ctx.stroke();83 ctx.closePath();84 ctx.beginPath();85 ctx.strokeStyle=‘blue‘;86 ctx.arc(0,0,126,0,2*Math.PI);87 ctx.stroke();88 ctx.closePath();89 ctx.restore();90 ctx.restore();91

92 window.requestAnimationFrame(rotateFun);93 }94

95 rotateFun();96

97

98

00:45:50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用HTML5的canvas元素和JavaScript来制作一个圆形钟表。下面是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <style> #canvas { border: 1px solid black; } </style> </head> <body> <canvas id="canvas" width="400" height="400"></canvas> <script> // 获取画布元素 var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); // 设置钟表参数 var radius = canvas.width / 2 - 10; var centerX = canvas.width / 2; var centerY = canvas.height / 2; // 绘制钟表 function drawClock() { // 清除画布 ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制钟表外圆 ctx.beginPath(); ctx.arc(centerX, centerY, radius, 0, Math.PI * 2); ctx.strokeStyle = "black"; ctx.lineWidth = 2; ctx.stroke(); ctx.closePath(); // 绘制钟表刻度 for (var i = 0; i < 12; i++) { var angle = i * (Math.PI / 6); var x = centerX + radius * Math.cos(angle); var y = centerY + radius * Math.sin(angle); ctx.beginPath(); ctx.arc(x, y, 5, 0, Math.PI * 2); ctx.fillStyle = "black"; ctx.fill(); ctx.closePath(); } // 绘制钟表指针 var now = new Date(); var hour = now.getHours(); var minute = now.getMinutes(); var second = now.getSeconds(); // 绘制时针 var hourAngle = (hour % 12 + minute / 60 + second / 3600) * (Math.PI / 6); drawHand(hourAngle, radius * 0.5, 8, "black"); // 绘制分针 var minuteAngle = (minute + second / 60) * (Math.PI / 30); drawHand(minuteAngle, radius * 0.8, 4, "black"); // 绘制秒针 var secondAngle = (second + now.getMilliseconds() / 1000) * (Math.PI / 30); drawHand(secondAngle, radius * 0.9, 2, "red"); // 更新钟表 setTimeout(function() { requestAnimationFrame(drawClock); }, 1000); } // 绘制钟表指针 function drawHand(angle, length, width, color) { var x = centerX + length * Math.cos(angle - Math.PI / 2); var y = centerY + length * Math.sin(angle - Math.PI / 2); ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo(x, y); ctx.strokeStyle = color; ctx.lineWidth = width; ctx.stroke(); ctx.closePath(); } // 启动钟表 drawClock(); </script> </body> </html> ``` 在这个示例,我们使用`<canvas>`元素创建了一个400x400像素大小的画布,并通过JavaScript获取到了画布的上下文对象`ctx`。然后,我们在`drawClock`函数使用`ctx`对象来绘制钟表的外圆、刻度和指针。 请注意,这只是一个简单的示例,你可以自行修改代码样式和钟表效果来满足你的需求。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值