通過html5 canvas繪制時鐘

jopen 12年前發布 | 54K 次閱讀 HTML5 前端技術

最近一直在學習html5,學到了html5的canvas標簽,這個畫布真的是很強大,它有對應的javascript的api的支持,你可以在這個標簽里面繪制任意的圖形,你也可以把圖片放在里面,能夠做出很炫的效果。

言歸正傳,廢話不多說,首先,html,只一句設置畫布的id,寬度和高度

<canvas id="myCanvas" width="200" height="200" ></canvas>

下面就javascript,不多說什么了,都是基本的語法,很容易明白的,里面的主要地方也有解釋:

注:

1.stroke()方法繪制當前路徑的邊框。路徑定義的幾何線條產生了,但線條的可視化取決于 strokeStyle、lineWidth、lineJoin、lineCap 和 miterLimit 等屬性。

2.save() 方法把當前狀態的一份拷貝壓入到一個保存圖像狀態的棧中。這就允許您臨時地改變圖像狀態,然后,通過調用 restore() 來恢復以前的值

3.translate() 方法為畫布的變換矩陣添加水平的和垂直的偏移。參數 dx  dy 添加給后續定義路徑中的所有點。

4.scale() 方法為畫布的當前變換矩陣添加一個縮放變換。縮放通過獨立的水平和垂直縮放因子來完成。例如,傳遞一個值 2.0 和 0.5 將會導致繪圖路徑寬度變為原來的兩倍,而高度變為原來的 1/2。指定一個負的 sx 值,會導致 X 坐標沿 Y 軸對折,而指定一個負的 sy 會導致 Y 坐標沿著 X 軸對折。

5.rotate() 方法通過指定一個角度,改變了畫布坐標和 Web 瀏覽器中的 <Canvas> 元素的像素之間的映射,使得任意后續繪圖在畫布中都顯示為旋轉的。它并沒有旋轉 <Canvas> 元素本身。注意,這個角度是用弧度指定的。

window.onload=function(){
      clock();
      setInterval(clock,1000);///每一秒鐘重新繪制一次
    };
    function clock(){
      ///得到時分秒
      var now=new Date();
      var sec=now.getSeconds(),min=now.getMinutes(),hour=now.getHours();
      hour=hour>=12?hour-12:hour;
      var c=document.getElementById("myCanvas").getContext("2d");
      
      c.save();
      c.clearRect(0,0,150,150);    ///初始化畫布
      c.translate(75,75);        
      c.scale(0.4,0.4);
      c.rotate(-Math.PI/2);
      
      c.strokeStyle="black";
      c.fillStyle="black";
      c.lineWidth=8;
      c.lineCap="round";
      
      c.save();
      c.beginPath();
      for(var i=0;i<12;i++){///小時刻度
        c.rotate(Math.PI/6);
        c.moveTo(100,0);
        c.lineTo(120,0);
      }
      c.stroke();
      c.restore();
      c.save();
      
      c.lineWidth=5;
      c.beginPath();
      for(var i=0;i<60;i++){///分鐘刻度
        if(i%5!=0){
          c.moveTo(117,0);
          c.lineTo(120,0);
        }
        c.rotate(Math.PI/30);
      }
      c.stroke();
      c.restore();
      c.save();
      
      c.rotate((Math.PI/6)*hour+(Math.PI/360)*min+(Math.PI/21600)*sec);///畫上時針
      c.lineWidth=14;
      c.beginPath();
      c.moveTo(-20,0);
      c.lineTo(75,0);
      c.stroke();
      c.restore();
      c.save();
      
      c.rotate((Math.PI/30)*min+(Math.PI/1800)*sec);///分針
      c.strokeStyle="#29A8DE";
      c.lineWith=10;
      c.beginPath();
      c.moveTo(-28,0);
      c.lineTo(102,0);
      c.stroke();
      c.restore();
      c.save();
      
      c.rotate(sec*Math.PI/30);///秒針
      c.strokeStyle="#D40000";
      c.lineWidth=6;
      c.beginPath();
      c.moveTo(-30,0);
      c.lineTo(83,0);
      c.stroke();
      c.restore();
      c.save();
      ///表框      
      c.lineWidth=14;
      c.strokeStyle="#325FA2";
      c.beginPath();
      c.arc(0,0,142,0,Math.PI*2,true);
      c.stroke();
      c.restore();
      c.restore();
    }

最后截張圖看看效果:

通過html5 canvas繪制時鐘

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!