<canvas>是html5新增的畫(huà)布元素,為了客戶(hù)端矢量圖形而設(shè)計(jì)的,它自己沒(méi)有行為(僅僅是一個(gè)畫(huà)圖的容器),但是定義了一個(gè) API 支持腳本化客戶(hù)端繪圖操作。canvas默認(rèn)的寬為300px,高為150px,你可以直接在該對(duì)象上指定寬度和高度,但是,其大多數(shù)功能都可以通過(guò) CanvasRenderingContext2D 對(duì)象獲得。 這是通過(guò) Canvas 對(duì)象的 getContext() 方法并且把直接量字符串 "2d" 作為唯一的參數(shù)傳遞給它而獲得的。
html代碼
//添加canvas標(biāo)簽
<canvas width=500 height=500></canvas>
js代碼
// 獲得canavs元素
var canvas =document.getElementById('myCanvas');
// 獲得canvas上下文對(duì)象
var ctx = canvas.getContext('2d');
Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 <canvas> 標(biāo)簽。 注釋?zhuān)篒nternet Explorer 8 以及更早的版本不支持 <canvas> 標(biāo)簽。
一、路徑繪制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
<style>
#canvas {
border: 1px solid #000000;
}
</style>
</head>
<body>
<canvas id="canvas" height="300" width="300"></canvas>
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.moveTo(100, 100);//移動(dòng)到( 100,100)坐標(biāo)點(diǎn),作為起點(diǎn)
ctx.lineTo(200, 100); //從當(dāng)前點(diǎn)繪制直線到(200,100)(上一個(gè)點(diǎn)即為當(dāng)前點(diǎn))
ctx.lineTo(200, 200);
ctx.stroke();//繪制路徑
</script>
</body>
</html>

在上述js代碼中加入 ctx.closePath();創(chuàng)建一條從當(dāng)前點(diǎn)回到起始點(diǎn)的路徑。
//js代碼
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.closePath();
ctx.stroke();

另外,可以填加 lineWidth 設(shè)置線段寬度,fill(),進(jìn)行填充,默認(rèn)填充色為黑色。當(dāng)存在fill()時(shí),代碼種無(wú) ctx.closePath()也可以進(jìn)行填充。
//js代碼
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = 'red';
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.closePath();
ctx.fill();

說(shuō)明
1.fill和stroke方法都是作用在當(dāng)前的所有子路徑。
2.完成一條路徑后要重新開(kāi)始另一條路徑時(shí)必須使用beginPath()方法, beginPath開(kāi)始子路徑的一個(gè)新的集合。
例如:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.strokeStyle= 'red';
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.closePath();
ctx.stroke();
ctx.strokeStyle='green';
ctx.moveTo(100, 200);
ctx.lineTo(200, 200);
ctx.stroke();


二、文本
繪制實(shí)心文本、空心文本。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.font = "30px Arial";
ctx.fillText("Hello World", 10, 50);
ctx.strokeText("Hello World", 10, 100);

三、矩形
1、ctx.rect(x, y, dx, dy);
x,y在矩形左上點(diǎn)的坐標(biāo),dx,dy為矩形的寬高。
需配合ctx.fill() ctx.stroke()使用
2、ctx.fillRect(x, y, dx, dy);
效果同
ctx.rect(x, y, dx, dy);
ctx.fill();
3、ctx.strokeRect(x, y, dx, dy);
效果同
ctx.rect(x, y, dx, dy);
ctx.stroke();
4、ctx.clearRect(x, y, dx, dy);
擦除某一區(qū)域,x,y為需擦除區(qū)域的左上點(diǎn)的坐標(biāo),dx,dy寬高。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.fillRect(50, 50, 50, 100);
ctx.strokeRect(200,50,50,100);
ctx.clearRect(50,50,30,30);

四、弧形
arc(x, y, r, 起始弧度, 結(jié)束弧度,弧形的?方向(0或1) )
0順時(shí)針 ,1逆時(shí)針
默認(rèn)為0

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.arc(100,100,50,0,Math.PI/180*90);
ctx.stroke();

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.arc(100,100,50,0,Math.PI/180*270);
ctx.stroke();

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.arc(100,100,50,0,Math.PI/180*90,1);
ctx.stroke();

五、圖片填充
createPattern(image,"repeat|repeat-x|repeat-y|no-repeat")
//html代碼
<canvas id="canvas" width="500" height="500"></canvas>
<img src="" style="visibility: hidden">
//js代碼
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
window.onload = function () {
var Img = document.getElementsByTagName('img')[0];
ctx.fillStyle = ctx.createPattern(Img, 'repeat');//設(shè)置為重復(fù)
ctx.fillRect(0, 0, 500, 400);//填充范圍
};

六、漸變效果
漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色。
以下有兩種不同的方式來(lái)設(shè)置Canvas漸變:
createLinearGradient(x,y,x1,y1) - 線條漸變
x、y為起點(diǎn)坐標(biāo),x1、y1為終點(diǎn)坐標(biāo)
createRadialGradient(x,y,r,x1,y1,r1) -徑向漸變
x,y x1,y1為圓點(diǎn),r、r1位半徑
addColorStop()方法指定顏色停止,參數(shù)使用坐標(biāo)來(lái)描述,可以是0至1.
使用漸變,設(shè)置fillStyle或strokeStyle的值為 漸變,然后繪制形狀,如矩形,文本,或一條線。
使用createLinearGradient
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var bg = ctx.createLinearGradient(0, 0, 0, 500);
bg.addColorStop(0, '#000');
bg.addColorStop(0.5, 'red');
bg.addColorStop(1, '#fff');
ctx.fillStyle = bg;
ctx.fillRect(0, 0, 300, 300);

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var gradient_font = ctx.createLinearGradient(0, 0, canvas.width, 0);
gradient_font.addColorStop(0,'blue');
gradient_font.addColorStop(0.3,'red');
gradient_font.addColorStop(0.6,'yellow');
gradient_font.addColorStop(1,'green');
ctx.font = '40px Arial';
ctx.fillStyle = gradient_font;
ctx.fillText('hello world', 50, 150);

使用createRadialGradient
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var bg = ctx.createRadialGradient(150, 150, 50, 150, 150, 110);
bg.addColorStop(0, '#fff');
bg.addColorStop(0.5, 'pink');
bg.addColorStop(1, '#fff');
ctx.fillStyle = bg;
ctx.fillRect(0, 0, 300, 300);
