按照官方例子画了几个基本图形,算是对于HTML5 Canvas有所了解,但是感觉这里面数学知识太忘记了,虽然以前数学竞赛出身,但是好多年不用了,有所遗忘。
HTML5的canvas元素只是提供了一个画布,而实际的绘制工作由javascript来完成。
基本HTML不说了, 也就是搭一个架子,放一个<canvas>元素,然后首部引入一些javascript文件,这里面每一个js文件都是一个画图的例子.
- <!DOCTYPE html>
- <head>
- <meta charset="UTF-8">
- <title>HTML5 Canvas DEMO</title>
- <script type="text/javascript" src="js/drawRect.js"></script>
- <script type="text/javascript" src="js/drawPath.js"></script>
- <script type="text/javascript" src="js/drawLine.js"></script>
- <script type="text/javascript" src="js/drawLinearGradient.js"></script>
- <script type="text/javascript" src="js/drawTransformShape.js"></script>
- <script type="text/javascript" src="js/drawAll.js"></script>
- </head>
-
- <body onload="drawAll('canvas')"></body>
- <h3>canvas:放开你的梦想</h3>
- <canvas id="canvas" width="400" height="300"/>
- <br><br>
例子1:绘制矩形
-
-
-
-
-
-
-
-
- function drawRect(id){
-
-
- var canvas=document.getElementById('canvas');
- if (canvas==null)
- return false;
-
-
- var context=canvas.getContext('2d');
-
- context.fillStyle="#0044FF";
-
- context.fillRect(0,0,400,300);
-
- context.fillStyle="red";
- context.strokeStyle="blue";
-
- context.lineWidth=1;
- context.fillRect(50,50,100,100);
-
- context.strokeRect(50,50,100,100);
- }
画出来的结果是:

例子2:用Path来绘制一组圆形:
-
-
-
-
-
-
- function drawPath(id){
-
- var canvas=document.getElementById(id);
- if(canvas == null)
- return false;
-
-
- var context = canvas.getContext("2d");
-
- context.fillStyle="#EEEEEF";
- context.fillRect(0,0,400,300);
-
-
- var n = 0;
- for(var i=0 ;i<10;i++){
-
- context.beginPath();
-
-
- context.arc(i*25,i*25,i*10,0,Math.PI*2,true);
-
- context.closePath();
- context.fillStyle="rgba(255,0,0,0.25)";
-
- context.fill();
- }
- }
画出来的结果是:

例子3:绘制直线,并且用直线组合复杂图形
-
-
-
-
-
-
- function drawLine(id){
-
- var canvas=document.getElementById(id);
- if(canvas==null)
- return false;
- var context = canvas.getContext('2d');
- context.fillStyle="#FF00FF";
- context.fillRect(0,0,400,300);
-
- var n=0;
- var dx=150;
- var dy=150;
- var s = 100;
- context.beginPath();
- context.fillStyle='rgb(100,255,100)';
- context.strokeStyle='rgb(0,0,100)';
- var x = Math.sin(0);
- var y = Math.cos(0);
- var dig=Math.PI/15*11;
- for(var i = 0;i<30;i++){
- var x = Math.sin(i*dig);
- var y = Math.cos(i*dig);
-
- context.lineTo(dx+x*s,dy+y*s);
- }
- context.closePath();
- context.fill();
- context.stroke();
- }
画出来的结果是:

例子4:使用线性渐变
-
-
-
-
-
-
-
-
- function drawLinearGradient(id){
-
- var canvas = document.getElementById(id);
- if(canvas==null)
- return false;
-
-
- var context = canvas.getContext('2d');
-
-
- var gradient1=context.createLinearGradient(0,0,0,300);
-
-
- gradient1.addColorStop(0,'rgb(255,255,0)');
- gradient1.addColorStop(1,'rgb(0,255,255)');
-
- context.fillStyle=gradient1;
-
- context.fillRect(0,0,400,300);
-
- var n = 0;
-
- var gradient2=context.createLinearGradient(0,0,300,0);
-
- gradient2.addColorStop(0,'rgba(0,0,255,0.5');
- gradient2.addColorStop(1,'rgba(255,0,0,0.5)');
-
- for(var i=0;i<10;i++){
- context.beginPath();
- context.fillStyle=gradient2;
- context.arc(i*25,i*25,i*10,0,Math.PI*2,true);
- context.closePath();
- context.fill();
- }
- }
画出来的结果是:

例子5:图形基本变换(平移,缩放,旋转)
-
-
-
-
-
-
-
-
-
- function drawTransformShape(id){
-
- var canvas = document.getElementById(id);
- if(canvas == null)
- return false;
-
- var context = canvas.getContext('2d');
- context.fillStyle="#FF00FF";
- context.fillRect(0,0,400,300);
-
-
- context.translate(200,50);
-
-
- for(var i=0;i<50;i++){
-
- context.translate(25,25);
-
- context.scale(0.95,0.95);
-
- context.rotate(Math.PI/10);
-
- create5star(context);
-
- context.fill();
- }
-
- }
-
-
-
- function create5star(context){
- var n = 0;
- var dx = 100;
- var dy = 0 ;
- var s = 50;
-
- context.beginPath();
- context.fillStyle="rgba(255,0,0,0.5)";
- var x = Math.sin(0);
- var y= Math.cos(0);
- var dig = Math.PI/5 *4;
-
- for(var i = 0;i<5;i++){
- var x = Math.sin(i*dig);
- var y = Math.cos(i*dig);
- context.lineTo(dx+x*s,dy+y*s);
- }
- context.closePath();
- }
-
-
画出来的结果是:
