绘制时钟

 <!doctype html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>Canvas绘制时钟Demo</title>
 <style>
 #myCanvas{
 border: 1px solid;
 }
 </style>
 </head>
 <body>
 <canvas id="myCanvas" width="500" height="400">
 很抱歉,你的浏览器不支持canvas元素
 </canvas>
 <script>
 var c = document.getElementById('myCanvas');//获取Canvas对象
 var ctx = c.getContext('2d');//获取上下文
 function drawClock()
 {
 ctx.clearRect(0,0, c.width, c.height);//清除画布
 c.width = c.width;//清除画布时需要重置宽度,否则会有一个画布的重叠
 var x = 250,y = 200,r = 180;//定义圆盘的中心坐标和圆盘的半径
 /*获取实际的时间*/
 var objTime = new Date();
 var objHour = objTime.getHours();
 var objMin = objTime.getMinutes();
 var objSen = objTime.getSeconds();
 /*将时间转换为具体的弧度*/
 /*
 * 因为时钟是从12点的位置算作开始,但是canvas是3点钟的位置算作0度,所以-90度指向12点方向
 * 时针是每小时相隔30度,objMin/2是为了做出当分针过半时,时针也相应的处于两个小时之间
 * 分针和秒针是每次相隔6度
 */
 var arcHour = (-90+objHour*30 + objMin/2)*Math.PI/180;
 var arcMin = (-90+objMin*6)*Math.PI/180;
 var arcSen = (-90+objSen*6)*Math.PI/180;
 /*绘制圆盘*/
 ctx.beginPath();
 for(var i=0;i<60;i++)//一共360度,一共60分钟,每分钟相隔6度,360/6=60
 {
 ctx.moveTo(x,y);
 ctx.arc(x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180,false);
 }
 ctx.closePath();
 ctx.stroke();
 /*绘制白盘盖住下面的线*/
 ctx.fillStyle = 'white';
 ctx.beginPath();
 ctx.arc(x,y,r*19/20,0,360*Math.PI/180,false);//半径取值为r的20分之19
 ctx.closePath();
 ctx.fill();
 /*依葫芦画瓢,制作每一个小时的线*/
 /*绘制圆盘*/
 ctx.beginPath();
 ctx.lineWidth = 3;
 for(var i=0;i<12;i++)//一共360度,一共12个小时,每小时相隔30度,360/30=12
 {
 ctx.moveTo(x,y);
 ctx.arc(x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180,false);
 }
 ctx.closePath();
 ctx.stroke();
 /*绘制白盘盖住下面的线*/
 ctx.fillStyle = 'white';
 ctx.beginPath();
 ctx.arc(x,y,r*18/20,0,360*Math.PI/180,false);//半径取值为r的20分之18
 ctx.closePath();
 ctx.fill();
 /*开始绘制时针分针和秒针,技巧就是起始弧度和结束弧度值一样*/
 /*开始绘制时针*/
 ctx.beginPath();
 ctx.moveTo(x,y);
 ctx.lineWidth = 7;
 ctx.lineCap = 'round';
 ctx.arc(x,y,r*10/20,arcHour,arcHour,false);//半径取值为r的20分之10
 ctx.stroke();
 ctx.closePath();
 /*开始绘制分针*/
 ctx.beginPath();
 ctx.moveTo(x,y);
 ctx.lineWidth = 5;
 ctx.lineCap = 'round';
 ctx.arc(x,y,r*12/20,arcMin,arcMin,false);//半径取值为r的20分之12
 ctx.stroke();
 ctx.closePath();
 /*开始绘制秒针*/
 ctx.beginPath();
 ctx.moveTo(x,y);
 ctx.lineWidth = 2;
 ctx.lineCap = 'round';
 ctx.arc(x,y,r*16/20,arcSen,arcSen,false);//半径取值为r的20分之16
 ctx.stroke();
 ctx.closePath();
 }
 setInterval('drawClock()',1000);//每隔1秒调用绘制时钟函数
 </script>
 </body>
 </html>

转载于:https://www.cnblogs.com/qilin0/p/11512314.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值