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>