canvas之动态时钟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了canvas之动态时钟相关的知识,希望对你有一定的参考价值。

 

 1 function showTime(){
 2         var can=document.getElementById("canvas");
 3         var c=can.getContext("2d");//定义2D画布
 4         can.width="1000";
 5         can.height="600";
 6         //平移确定中心
 7         c.translate(500,300);
 8         //获取本地时间
 9         var sum=new Date();
10         var sh=sum.getHours();
11         var sm=sum.getMinutes();
12         var se=sum.getSeconds();
13             sh=sh>=12?sh-12:sh;
14         //时针
15         c.save();
16         c.rotate(sh*(Math.PI/6)+sm*(Math.PI/6/60)+se*(Math.PI/6/60/60));//转成时针的弧度:时+分+秒
17         c.moveTo(0,30);
18         c.lineTo(0,-115);
19         c.lineWidth=15;
20         c.lineCap="round";
21         c.stroke();
22         c.restore();
23         //分针
24         c.save();//防止互相干扰
25         c.rotate(sm*(Math.PI/6/5)+se*(Math.PI/6/5/60));
26         c.moveTo(0,35);
27         c.lineTo(0,-135);
28         c.lineWidth=12;
29         c.lineCap="round";
30         c.stroke();
31         c.restore();
32         
33         //秒针
34            c.beginPath();
35         c.fillStyle="#f00";
36         c.arc(0,0,15,0,2*Math.PI);
37         c.fill();
38 
39         c.save();
40         c.rotate(se*(Math.PI/30));
41         c.beginPath();
42           c.strokeStyle="#f00";
43           c.lineWidth=5;
44           c.moveTo(0,45);
45           c.lineTo(0,-140);
46           c.stroke();
47           c.restore();
48          
49          //秒间隔的点//虚线画法//遇到跟随顺势针旋转问题,分别测试将时、分、秒旋转方向改为反向,发现改分针时,出现跟随的方向也反转,确定是受分针转动影响
50          c.save();
51           c.beginPath();
52           c.arc(0,0,200,0,2*Math.PI);
53         c.setLineDash([5,2*Math.PI*200/60-5]);//周长除以60减去线粗5
54         c.lineDashOffset="2.5";//修正线粗带来的偏差
55         c.lineWidth=5;
56         c.lineCap="butt";
57         c.strokeStyle="#000";
58         c.stroke();
59         c.restore();
60         //时点
61         c.save();
62         c.beginPath();
63         c.arc(0,0,195,0,2*Math.PI);
64         c.setLineDash([8, 195*2*Math.PI/12-8]);
65         c.lineDashOffset="4";
66         c.lineWidth=20;
67         c.stroke();
68         c.restore();
69         //时钟数字
70           var x;
71           var y;
72           var n=-1;
73           var array=[3,4,5,6,7,8,9,10,11,12,1,2];
74           for(var m=0;m<12;m++){
75               n+=1;
76               x=170*(Math.cos(Math.PI/6*n))-8;//后面减去8、加上10,修正中心
77               y=170*(Math.sin(Math.PI/6*n))+10;
78               c.beginPath();
79               c.fillStyle="#000";
80               c.font="24px 微软雅黑";
81               //10、11、12占两位需修正不对齐中心问题,这里只修正12,n==9
82               if(n==9){
83                   x=x-5;
84               }
85               c.fillText(array[m],x,y);
86           }
87         //加个钟盘样式好看点
88         c.beginPath();
89         c.arc(0,0,220,0,2*Math.PI);
90         c.strokeStyle="#325fa2";
91         c.lineWidth=10;
92         c.stroke();
93     }
94         showTime();    
95         setInterval(showTime,1000);
    

 

以上是关于canvas之动态时钟的主要内容,如果未能解决你的问题,请参考以下文章

应用canvas绘制动态时钟--每秒自动动态更新时间

利用canvas画一个动态时钟

canvas :原生javascript编写动态时钟

canvas入门之时钟的实现

canvas简单实现动态时钟

使用canvas画动态时钟