canvas元素在html5中的重要性非同通常。配合JS讓咱們實現了在瀏覽器頁面中做畫的強大功能。再也不單單依靠圖片,flash等外部文件,減小http請求,從而網頁加載速度更加快捷。html
簡單的線段:html5
看個小演示 canvas小房子canvas
不用函數累死人。。。。瀏覽器
旋轉:函數
使用提供的rotate()方法。須要注意的是,在旋轉前,應該從新定位原點。通常來講將要旋轉的圖像的端點重定向爲原點,以此爲基礎來旋轉。也就是說先定位,再設置旋轉角度,最後畫圖。看個演示 canvas 扇子。這樣要比一道一道的畫線方便許多。spa
用漸變色填充圖像:.net
分爲徑向漸變和線性漸變,有點相似於CSS3的漸變操做。不須要再用圖片來作漸變背景了。rest
看個演示 canvas 立體小球。code
用這些方法就能夠作一個時鐘了,純canvas+js,不使用圖片。xml
查看效果 canvas時鐘
完整的代碼:
- <span style="font-family:Microsoft YaHei;font-size:14px;"><!DOCTYPE html>
- <html>
- <head>
- <metac charset=UTF-8>
- <title>時鐘</title>
- </head>
- <body>
- <canvas id="canvas" width="500" height="500">請更新瀏覽器版本</canvas>
- <script>
- var can=document.getElementById("canvas");
- var cxt=can.getContext("2d");
-
- function drawClock(){
- //清楚畫布
- cxt.clearRect(0, 0, 500, 500);
- //獲得當前時間
- var time=new Date();
- var hours=time.getHours();
- var mins=time.getMinutes();
- var secs=time.getSeconds();
-
- //轉換爲12進制
- hours=hours>12?hours-12:hours;
- //小時必須得到浮點型,不能只顯示整點
- hours=hours+mins/60;
- //先畫出錶盤
- cxt.lineWidth=10;
- cxt.strokeStyle="blue";
- cxt.beginPath();
- cxt.arc(250, 250, 200, 0, 360, false);
- cxt.closePath();
- cxt.stroke();
-
- //畫出時刻
- for(var i=0;i<12;i++){
- cxt.save();
- cxt.beginPath();
- cxt.lineWidth=7;
- cxt.strokeStyle="black";
- //按照圓心來旋轉,好計算
- cxt.translate(250, 250);
- cxt.rotate(i*30*Math.PI/180);
- cxt.beginPath();
- cxt.moveTo(0, -170);
- cxt.lineTo(0, -190);
- cxt.closePath();
- cxt.stroke();
- cxt.restore();
- }
- for(var i=0;i<60;i++){
- cxt.save();
- cxt.beginPath();
- cxt.lineWidth=5;
- cxt.strokeStyle="black";
- //按照圓心來旋轉,好計算
- cxt.translate(250, 250);
- cxt.rotate(i*6*Math.PI/180);
- cxt.beginPath();
- cxt.moveTo(0, -180);
- cxt.lineTo(0, -190);
- cxt.closePath();
- cxt.stroke();
- cxt.restore();
- }
-
- //畫出時針
- cxt.save();
- cxt.lineWidth=7;
- cxt.strokeStyle="black";
- cxt.translate(250, 250);
- cxt.rotate(hours*30*Math.PI/180);
- cxt.beginPath();
- cxt.moveTo(0, 15);
- cxt.lineTo(0, -130);
- cxt.closePath();
- cxt.stroke();
- cxt.restore();
- //分針
- cxt.save();
- cxt.lineWidth=5;
- cxt.strokeStyle="black";
- cxt.translate(250, 250);
- cxt.rotate(mins*6*Math.PI/180);
- cxt.beginPath();
- cxt.moveTo(0, 15);
- cxt.lineTo(0, -150);
- cxt.closePath();
- cxt.stroke();
- cxt.restore();
- //秒針
- cxt.save();
- cxt.lineWidth=3;
- cxt.strokeStyle="red";
- cxt.translate(250, 250);
- cxt.rotate(secs*6*Math.PI/180);
- cxt.beginPath();
- cxt.moveTo(0, 15);
- cxt.lineTo(0, -172);
- cxt.closePath();
- cxt.stroke();
- //美化 畫出中間的小圓點
- cxt.beginPath();
- cxt.arc(0, 0, 6, 0, 360, false);
- cxt.closePath();
- cxt.fillStyle="black";
- cxt.fill();
- cxt.stroke();
- //畫出秒針前段的小圓點
- cxt.beginPath();
- cxt.arc(0, -150, 8, 0, 360, false);
- cxt.closePath();
- cxt.fillStyle="black";
- cxt.fill();
- cxt.stroke();
- cxt.restore();
-
-
- }
- //爲了不打開後等待1秒才畫圖,先調用一次
- drawClock();
- setInterval(drawClock,1000);
-
- </script>
- </body>
- </html></span>