码迷,mamicode.com
首页 > 其他好文 > 详细

时钟练习

时间:2018-06-05 00:33:08      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:90度   alt   function   load   utf-8   div   sel   rect   etc   

  1. 技术分享图片
  2. ##表盘

            1.初始化

                     将圆心调整到画布的中间

                     由于canvas中画圆与旋转所参照的坐标系于正常坐标系有出入

                             将整个画布逆时针旋转90度

                     初始化一些样式数据

                             ctx.lineWidth = 8;

                           ctx.strokeStyle = "black";

                           ctx.lineCap = "round";

           

            2.外层空心圆盘

                     圆盘颜色:#325FA2

                     圆盘宽度:14

                     圆盘半径:140

                    

            3.时针刻度

                     长度为20

                     宽度为8

                     外层空心圆盘与时针刻度之间的距离也为20

                    

            4.分针刻度

                     宽度为4

                     长度为3

                    

            5.时针

                     宽度为14

                     圆心外溢出80 收20

                    

            6.分针

                     宽度为10

                     圆心外溢出112 收28

                    

            7.秒针

                     颜色:D40000

                     宽度为6

                     圆心外溢出83 收30

                    

                     ---->中心实心圆盘

                             半径为10

                     ---->秒针头

                             96码开外半径为10的空心圆

                             宽度为6

     

    绘制钟表:

     demo地址:https://github.com/Hightinstance/practice/blob/master/Clocks/index.html

  3. <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style type="text/css">
    			*{
    				margin: 0;
    				padding: 0;
    			}
    			html,body{
    				height: 100%;
    				overflow: hidden;
    				background: pink;
    			}
    			#clock{
    				background: gray;
    				position: absolute;
    				left: 50%;
    				top: 50%;
    				transform: translate3d(-50%,-50%,0);
    			}
    		</style>
    	</head>
    	<body>
    		<canvas id="clock" width="400" height="400"></canvas>
    	</body>
    	<script type="text/javascript">
    		window.onload = function(){
    			//画表盘
    			var clock = document.querySelector("#clock");
    			if(clock.getContext)
    			{
    				var ctx = clock.getContext("2d");
    				move();
    				setInterval(function(){
    					//每次清除画布
    					ctx.clearRect(0,0,clock.width,clock.height);
    					move();
    				},1000);
    			}
    			function move(){
    				//外圈
    			ctx.save();
    			//钟表样式
    			ctx.lineWidth = 8;
    		  	ctx.strokeStyle = "black";
    		  	ctx.lineCap = "round";
                //中心点的坐标和坐标系转换
                ctx.translate(200,200);
                ctx.rotate(-90*Math.PI/180);
    			ctx.beginPath();
    			//画圆
    			ctx.save();//存储外部表盘的样式
    			ctx.strokeStyle = "#325FA2";
    			ctx.lineWidth = 14;
    			ctx.beginPath();
    			ctx.arc(0,0,140,0,360);
    			ctx.stroke();
    			ctx.restore();
    			
    			
    			//时针
    //			长度为20
    //		宽度为8
    //		外层空心圆盘与时针刻度之间的距离也为20,画12个,旋转30度
               
                ctx.save();
                //相同的样式不需要清除
                for(var i=0;i<12;i++)
                {
                 ctx.lineWidth = 8;  
    			 ctx.beginPath();
    			 ctx.moveTo(100,0);
    			 ctx.lineTo(120,0);
    			 ctx.stroke();
    			 ctx.rotate(30*Math.PI/180);
    			}
    			ctx.restore();
    			
    			//分针同样的套路
    			ctx.save();
                //相同的样式不需要清除
                for(var i=0;i<60;i++)
                {
                 ctx.lineWidth = 4;  
    			 ctx.beginPath();
    			 ctx.moveTo(117,0);
    			 ctx.lineTo(120,0);
    			 ctx.stroke();
    			 ctx.rotate(6*Math.PI/180);
    			}
    			ctx.restore();
    			
    			var date = new Date();
    			var s = date.getSeconds();
    			var m = date.getMinutes()+s/60;
    			var h = date.getHours()+m/60;
    			//12小时制
    			h=h>12?h-12:h;
    			
    			
    			//画分针,时针,秒针,
    			//时针
    			ctx.save();
    			ctx.lineWidth = 14;
    			ctx.rotate(h*30*Math.PI/180);
    			ctx.beginPath();
    			ctx.moveTo(-20,0);
    			ctx.lineTo(80,0);
    			ctx.stroke();
    			ctx.restore();
    			
    			//分针
    			ctx.save();
    			ctx.lineWidth = 10;
    			ctx.rotate(m*6*Math.PI/180);
    			ctx.beginPath();
    			ctx.moveTo(-28,0);
    			ctx.lineTo(112,0);
    			ctx.stroke();
    			ctx.restore();
    			
    			//秒针
    			ctx.save();
    			ctx.lineWidth = 6;
    			ctx.strokeStyle = "#D40000";
    			ctx.fillStyle = "#D40000";
    			ctx.rotate(s*6*Math.PI/180);
    			ctx.beginPath();
    			ctx.moveTo(-30,0);
    			ctx.lineTo(83,0);
    			ctx.stroke();
    			//中心圆
    			ctx.beginPath();
    			ctx.arc(0,0,10,0,360);
    			ctx.fill();
    			//表头
    			ctx.beginPath();
    			ctx.arc(96,0,10,0,360);
    			ctx.stroke();
    			//秒针清空样式
    			ctx.restore();
    			//最后清空,坐标系和原点需要使用
    			ctx.restore();
    			}
    			
    			
    		}
    	</script>
    </html>
    

      

 

时钟练习

标签:90度   alt   function   load   utf-8   div   sel   rect   etc   

原文地址:https://www.cnblogs.com/love-life-insist/p/9136598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!