玩转html5(四)----使用canvas画一个时钟

先给个效果图,我画的比较丑,大家可以自己美化一下,




直接上代码:

<!DOCTYPE html>
<meta charset="utf-8">
<html>
   <body>
   	  <canvas  width="500" height="500" id="clock" >  
   	         您的浏览器不支持canvas
   	  </canvas>
   	  <script>
           //获取画布
           var clock=document.getElementById('clock');
           //设置绘图环境
           var cxt=clock.getContext('2d');  

       function drawClock(){    
       	   //清除画布
       	   cxt.clearRect(0,0,500,500);
           //获取时间,
            var now =new Date();
            var second =now.getSeconds();
            var minute =now.getMinutes();
            var hour1 =now.getHours();
            //将24小时进制转为12小时,且为浮点型
            var hour=hour1+minute/60;
            hour=hour>12 ?hour-12:hour;
            //获取全部时间
            var time=now.toLocaleString( );
            
           //表盘
                //开始新路径
                cxt.beginPath();
                cxt.lineWidth=8;
                cxt.strokeStyle="blue";
                //路径函数 x,y,r,角度范围,顺时针/逆时针
                cxt.arc(250,250,200,0,360,false);
                cxt.stroke(); 
                cxt.closePath();
            //刻度,利用旋转
               //时刻度
                for(var i=0;i<12;i++){
                	//保存当前状态
                    cxt.save();
                    //刻度粗细
                     cxt.lineWidth=5;
                    //刻度颜色
                    cxt.strokeStyle="black"
                    //设置00点,以画布中心为00
                    cxt.translate(250,250);
                    //设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
                    cxt.rotate(i*30*Math.PI/180);
                    cxt.beginPath();
                    //刻度起始点
                    cxt.moveTo(0,-180);
                    //刻度结束点
                    cxt.lineTo(0,-195);
                    cxt.closePath();
                    cxt.stroke();
                    //将旋转后的图片返回原画布
                    cxt.restore();
                }

               //分刻度
                 for(var i=0;i<60;i++){
                	//保存当前状态
                    cxt.save();
                    //刻度粗细
                    cxt.lineWidth=3;
                    //刻度颜色
                    cxt.strokeStyle="black"
                    //设置00点,以画布中心为00
                    cxt.translate(250,250);
                    //设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
                    cxt.rotate(i*6*Math.PI/180);
                    cxt.beginPath();
                    //起始点
                    cxt.moveTo(0,-188);
                    cxt.lineTo(0,-195);
                    cxt.closePath();
                    cxt.stroke();
                    //将旋转后的图片返回原画布
                    cxt.restore();
                }
            //表盘中心
                cxt.beginPath();
                cxt.lineWidth=1;
                cxt.strokeStyle="red";
                cxt.fillStyle="red";
                //路径函数 x,y,r,角度范围,顺时针/逆时针
                cxt.arc(250,250,4,0,360,false);
                cxt.fill();
                cxt.stroke(); 
                cxt.closePath();
            //时针
                //保存当前状态
                 cxt.save();
                 cxt.lineWidth=5;
                 cxt.strokeStyle="black";
                 //设置异次元空间00点
                 cxt.translate(250,250);
                 //设置旋转角度 参数是弧度,角度 0--360 弧度角度*Math.PI/180
                 cxt.rotate(hour*30*Math.PI/180);
                 cxt.beginPath();     
                 cxt.moveTo(0,-120);
                 cxt.lineTo(0,10);
                 cxt.closePath();
                 cxt.stroke();
                 cxt.restore();
            //分针
                 cxt.save();
                 cxt.lineWidth="3";
                 cxt.strokeStyle="black";
                 cxt.translate(250,250);
                 cxt.rotate(minute*6*Math.PI/180);
                 cxt.beginPath();     
                 cxt.moveTo(0,-150);
                 cxt.lineTo(0,15);
                 cxt.closePath();
                 cxt.stroke();
                 cxt.restore();
            //秒针
                 cxt.save();
                 cxt.lineWidth="1.5";
                 cxt.strokeStyle="red";
                 cxt.translate(250,250);
                 cxt.rotate(second*6*Math.PI/180);
                 cxt.beginPath();     
                 cxt.moveTo(0,-160);
                 cxt.lineTo(0,20);
                 cxt.closePath();
                 cxt.stroke();
                 //秒针前端小点
                 cxt.beginPath();
                 //外环为红色
                 cxt.strokeStyle="red";
                 //灰色填充
                 cxt.fillStyle="gray";
                 cxt.arc(0,-145,4,0,360,false);
                   cxt.fill();
                 cxt.closePath();
                 cxt.stroke();
                 cxt.restore();
            //表盘中心
                cxt.beginPath();
                cxt.lineWidth=1;
                //外环为红色
                cxt.strokeStyle="red";
                //灰色填充
                cxt.fillStyle="gray";
                //路径函数 x,y,r,角度范围,顺时针/逆时针
                cxt.arc(250,250,4,0,360,false);
                cxt.fill();
                cxt.stroke(); 
                cxt.closePath();
            //写时间    
                cxt.font="15px 黑体 ";
                 cxt.fillStyle="black";
                //实心字
                cxt.fillText(time,160,150);
           }      
           //使用setInterval(代码,毫秒时间)使时钟转起来;
           drawClock();
           setInterval(drawClock,1000);


   	  </script>
   </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值