<!DOCTYPE html>
  <html>
  <head>
  <meta charset="utf-8" />
  <title>Canvas Clock</title>
  <style type="text/css">
   
  div{
  text-align: center;
  margin-top: 250px;
  }
  #clock{
   
  border: 1px solid #ccc;
  }
  </style>
  </head>
  <body>
  <div>
  <canvas id="clock" height="200px" width="200px"></canvas>
  </div>
   
  <script>
  var cc=document.getElementById("clock");
  var cxt=cc.getContext("2d");
  var r=100;//半径设置为100
  var deg= 2*Math.PI/60;//秒针分针走一个格所用的角度
  var deg2=2*Math.PI/12;//时针一个格子的角度
  //表盘
  function biaopan(){
  cxt.beginPath();
  cxt.lineWidth=1;
  cxt.strokeStyle="black";
  cxt.arc(100,100,r,0,2*Math.PI,false);
  cxt.stroke();
   
  for(var i=0;i<60;i++){
  var x=r*Math.cos(deg*i);//三角函数计算每一个格子的位置
  var y=r*Math.sin(deg*i);
  if (i%5 == 0){//画出小时的刻度
  cxt.beginPath();
  cxt.moveTo(100,100);
  cxt.strokeStyle="red";//这个全文通用的那种,所以在画小格子的时候一定要改回黑色,不改他不会自己回到默认的
  cxt.lineTo(r+x,r+y);
  cxt.stroke();
  }
  else{
  cxt.beginPath();
  cxt.moveTo(100,100);
  cxt.lineTo(r+x,r+y);
  cxt.strokeStyle="black";//!就是这里
  cxt.stroke();
  }
   
   
  }
   
   
  cxt.beginPath();
  cxt.arc(100,100,r-10,0,2*Math.PI,false);
  cxt.fillStyle="white";
  cxt.fill();
   
  // 数字
  cxt.beginPath();
  cxt.font="14px Arial";
  cxt.textAlign='center'
  cxt.textBaseline='middle'
  var hourNums=[3,4,5,6,7,8,9,10,11,12,1,2];//起笔是在水平方向,就是三点钟的方向所以再添加数字时从三开始
  hourNums.forEach(function(number,i){//添加小时的数字
  cxt.beginPath();
  cxt.moveTo(100,100);
  var rad=2*Math.PI/12*i;
  var x=Math.cos(rad)*(r-15);
  var y=Math.sin(rad)*(r-15);
  cxt.fillStyle="black";
  cxt.fillText(number,r+x,r+y);
   
  });
  // 表芯
   
  cxt.beginPath();
  cxt.moveTo(100,100);
  cxt.arc(102,102,4,0,2*Math.PI,false);
  cxt.fillStyle="black";
  cxt.fill();}
   
  //表针
  function biaozhen(second,minute,hour){
  var s=cc.getContext("2d");
  var h=cc.getContext("2d");
  var m=cc.getContext("2d");
  //秒针
  s.beginPath();
  s.moveTo(100,100);
  s.arc(100,100,70,(second*360/60-90)*Math.PI/180,(second*360/60-90)*Math.PI/180);
  s.strokeStyle="red";
  s.stroke();
   
  //时针
  h.beginPath();
  h.moveTo(100,100);
  h.arc(100,100,50,(hour*360/12-90)*Math.PI/180,(hour*360/12-90)*Math.PI/180);
  h.strokeStyle="black";
  h.stroke();
  //分针
  m.beginPath();
  m.moveTo(100,100);
  m.arc(100,100,60,(minute*360/60-90)*Math.PI/180,(minute*360/60-90)*Math.PI/180);
  m.strokeStyle="green";
  m.stroke();
  }
  //动画
  function draw(){
  cxt.clearRect(0,0,200,200);
  var now=new Date();
  var second=now.getSeconds();
  var minute=now.getMinutes()+second/60;//为了不让分针嗖的一下子蹦一个格,要带上秒
  var hour=now.getHours()+minute/60;//就是可以让时针也随着分针缓步前进
   
  biaopan();
  biaozhen(second,minute,hour);
  }
  setInterval(draw,1000);
   
  </script>
  </body>
 

</html>

刚学canvas时做的,其实很简单,但是对原理掌握的不清楚,所以做的很麻烦,感觉就是一层又一层的往上叠加,之前看到一个利用save和restore做的,做的很美观,我这个就是为了练一下,就像表示小时的刻度线可以画的长一些,不过我比较懒就没弄,慢慢学吧,就当记录自己的代码了,这个是丑丑的效果图。

canvas实现简单的时钟

相关文章: