什么是 canvas?
HTML5 的 Canvas 元素使用 JavaScript 在網(wǎng)頁(yè)上繪制圖像拳芙。
畫(huà)布是一個(gè)矩形區(qū)域,你可以控制其每一像素僵驰。
canvas 擁有多種繪制路徑垢箕、矩形、圓形、字符以及添加圖像的方法狮鸭。
創(chuàng)建 Canvas 元素
向 HTML5 頁(yè)面添加 Canvas 元素合搅。
規(guī)定元素的 id、寬度和高度:(相當(dāng)于我們創(chuàng)建了一塊畫(huà)布~)
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
</canvas>
通過(guò) JavaScript 來(lái)繪制
Canvas 元素本身是沒(méi)有繪圖能力的歧蕉。所有的繪制工作必須在 JavaScript 內(nèi)部完成:
//首先灾部,找到 <canvas> 元素:
var c=document.getElementById("myCanvas");
//然后,獲取2d上下文對(duì)象
var ctx = c.getContext("2d");
//getContext("2d") 對(duì)象是內(nèi)建的 HTML5 對(duì)象惯退,擁有多種繪制路徑赌髓、矩形、圓形催跪、字符以及添加圖像的方法锁蠕。
//下面的兩行代碼繪制一個(gè)紅色的矩形:
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
//設(shè)置fillStyle屬性可以是CSS顏色,漸變懊蒸,或圖案荣倾。fillStyle 默認(rèn)設(shè)置是#000000(黑色)。
//fillRect(x,y,width,height) 方法定義了矩形當(dāng)前的填充方式骑丸。
Canvas 坐標(biāo)
canvas 是一個(gè)二維網(wǎng)格舌仍。
canvas 的左上角坐標(biāo)為 (0,0)
上面的 fillRect 方法擁有參數(shù) (0,0,150,75)。
意思是:在畫(huà)布上繪制 150x75 的矩形通危,從左上角開(kāi)始 (0,0)铸豁。
下面是一些方法
1. 開(kāi)啟新路徑
ctx.beginPath();
2. 起始點(diǎn)
x是橫坐標(biāo),y是縱坐標(biāo)
ctx.moveTo(x, y);
3. 路徑
x是橫坐標(biāo)菊碟,y是縱坐標(biāo)
ctx.lineTo(x, y)
4. 閉合路徑
ctx.closePath()
5. 描邊與填充
ctx.stroke();//線條類(lèi)的使用
ctx.fill();//形狀類(lèi)的使用
6. 設(shè)置描邊和填充的顏色
ctx.strokeStyle = '顏色';
ctx.fillStyle = '顏色';
7. 清除畫(huà)布
ctx.clearRect(x, y, width, height);
8.文本
font - 定義字體
fillText(text,x,y) - 在 canvas 上繪制實(shí)心的文本
strokeText(text,x,y) - 在 canvas 上繪制空心的文本
ctx.textAlign 文本水平對(duì)齊方式:left right center
ctx.textBaseline 文本垂直對(duì)齊方式:top middel bottom
如:
ctx.font="30px Arial";//使用 "Arial" 字體在畫(huà)布上繪制一個(gè)高 30px 的文字
ctx.fillText("Hello World",10,50);//(實(shí)心)
ctx.strokeText("Hello World",10,50);//(空心)
線的樣式
線的寬度
ctx.lineWidth = 線的寬度線帽(線條兩端是什么樣子)
ctx.lineCap = 'butt'默認(rèn)
round: 半圓
square: 方形
圓
圓心:x, y
blur: 半徑
start,end: 起始角度节芥,結(jié)束角度
boolean: 是否為逆時(shí)針(true), 默認(rèn)順時(shí)針(false))(可選)
ctx.arc(x, y, blur, start, end, boolean)
cxt.arc(500,210,100,0,2*Math.PI);//PI就是圓周率π,PI是弧度制的π,也就是180°
所以逆害,Math.PI = 3.14 = 180°
漸變
漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色藏古。
以下有兩種不同的方式來(lái)設(shè)置Canvas漸變:
· createLinearGradient(x1, y1, x2, y2) 創(chuàng)建線性漸變
接受 4 個(gè)參分別表示漸變的起點(diǎn) (x1,y1) 與終點(diǎn) (x2,y2)。
· createRadialGradient(x1, y1, r1, x2, y2, r2) 創(chuàng)建一個(gè)徑向/圓漸變
接受 6 個(gè)參數(shù)忍燥,前三個(gè)定義一個(gè)以 (x1,y1) 為原點(diǎn)拧晕,半徑為 r1 的圓,后三個(gè)參數(shù)則定義另一個(gè)以 (x2,y2) 為原點(diǎn)梅垄,半徑為 r2 的圓厂捞。
示例:
var lineargradient = ctx.createLinearGradient(0,0,150,150);
var radialgradient = ctx.createRadialGradient(75,75,0,75,75,100);
當(dāng)我們使用漸變對(duì)象输玷,必須使用兩種或兩種以上的停止顏色。
addColorStop()方法指定顏色停止靡馁,參數(shù)使用坐標(biāo)來(lái)描述欲鹏,可以是0至1.
使用漸變,設(shè)置fillStyle或strokeStyle的值為 漸變臭墨,然后繪制形狀赔嚎,如矩形,文本胧弛,或一條線尤误。
// 創(chuàng)建漸變
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// 填充漸變
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);