? <canvas> 是 HTML5 新增的,一個可以使用腳本(通常為JavaScript)在其中繪制圖像的 HTML 元素。它可以用來制作照片集或者制作簡單(也不是那么簡單)的動畫,甚至可以進行實時視頻處理和渲染。
<canvas> 標簽定義圖形,比如圖表和其他圖像,您必須使用腳本來繪制圖形。
在畫布上(Canvas)畫一個紅色矩形,漸變矩形,彩色矩形,和一些彩色的文字。
HTML5 <canvas> 元素用于圖形的繪制,通過腳本 (通常是JavaScript)來完成.
<canvas> 標簽只是圖形容器,您必須使用腳本來繪制圖形。
你可以通過多種方法使用 canvas 繪制路徑,盒、圓、字符以及添加圖像。
表格中的數(shù)字表示支持 <canvas> 元素的第一個瀏覽器版本號。
元素 | |||||
<canvas> | 4.0 | 9.0 | 2.0 | 3.1 | 9.0 |
一個畫布在網(wǎng)頁中是一個矩形框,通過 <canvas> 元素來繪制.
注意: 默認情況下 <canvas> 元素沒有邊框和內(nèi)容。
<canvas>簡單示例如下:
<canvas id="myCanvas" width="200" height="100"></canvas>
注意: 標簽通常需要指定一個id屬性 (腳本中經(jīng)常引用), width 和 height 屬性定義的畫布的大小.
提示:你可以在HTML頁面中使用多個 <canvas> 元素.
使用 style 屬性來添加邊框:
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>菜鳥教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"> </canvas> </body> </html>測試看看 ?/?
canvas 元素本身是沒有繪圖能力的。所有的繪制工作必須在 JavaScript 內(nèi)部完成:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。 </canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#FF0000"; ctx.fillRect(0,0,150,75); </script> </body> </html>測試看看 ?/?
示例解析:
首先,找到 <canvas> 元素:
var c=document.getElementById("myCanvas");
然后,創(chuàng)建 context 對象:
var ctx=c.getContext("2d");
getContext("2d") 對象是內(nèi)建的 HTML5 對象,擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法。
下面的兩行代碼繪制一個紅色的矩形:
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
設置fillStyle屬性可以是CSS顏色,漸變,或圖案。fillStyle 默認設置是#000000(黑色)。
fillRect(x,y,width,height) 方法定義了矩形當前的填充方式。
canvas 是一個二維網(wǎng)格。
canvas 的左上角坐標為 (0,0)
上面的 fillRect 方法擁有參數(shù) (0,0,150,75)。
意思是:在畫布上繪制 150x75 的矩形,從左上角開始 (0,0)。
坐標示例
如下圖所示,畫布的 X 和 Y 坐標用于在畫布上對繪畫進行定位。鼠標移動的矩形框上,顯示定位坐標。
在Canvas上畫線,我們將使用以下兩種方法:
moveTo(x,y) 定義線條開始坐標
lineTo(x,y) 定義線條結(jié)束坐標
繪制線條我們必須使用到 "ink" 的方法,就像stroke().
定義開始坐標(0,0), 和結(jié)束坐標 (200,100)。然后使用 stroke() 方法來繪制線條:
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.moveTo(0,0); ctx.lineTo(200,100); ctx.stroke(); </script> </body> </html>測試看看 ?/?
在canvas中繪制圓形, 我們將使用以下方法:
arc(x,y,r,start,stop)
實際上我們在繪制圓形時使用了 "ink" 的方法, 比如 stroke() 或者 fill().
使用 arc() 方法 繪制一個圓:
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(95,50,40,0,2*Math.PI); ctx.stroke(); </script> </body> </html>測試看看 ?/?
使用 canvas 繪制文本,重要的屬性和方法如下:
font - 定義字體
fillText(text,x,y) - 在 canvas 上繪制實心的文本
strokeText(text,x,y) - 在 canvas 上繪制空心的文本
使用 fillText():
使用 "Arial" 字體在畫布上繪制一個高 30px 的文字(實心):
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font="30px Arial"; ctx.fillText("Hello World",10,50); </script> </body> </html>測試看看 ?/?
使用 strokeText():
使用 "Arial" 字體在畫布上繪制一個高 30px 的文字(空心):
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font="30px Arial"; ctx.strokeText("Hello World",10,50); </script> </body> </html>測試看看 ?/?
漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色。
以下有兩種不同的方式來設置Canvas漸變:
createLinearGradient(x,y,x1,y1) - 創(chuàng)建線條漸變
createRadialGradient(x,y,r,x1,y1,r1) - 創(chuàng)建一個徑向/圓漸變
當我們使用漸變對象,必須使用兩種或兩種以上的停止顏色。
addColorStop()方法指定顏色停止,參數(shù)使用坐標來描述,可以是0至1.
使用漸變,設置fillStyle或strokeStyle的值為 漸變,然后繪制形狀,如矩形,文本,或一條線。
使用 createLinearGradient():
創(chuàng)建一個線性漸變。使用漸變填充矩形:
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); // Create gradient var grd=ctx.createLinearGradient(0,0,200,0); grd.addColorStop(0,"red"); grd.addColorStop(1,"white"); // Fill with gradient ctx.fillStyle=grd; ctx.fillRect(10,10,150,80); </script> </body> </html>測試看看 ?/?
使用 createRadialGradient():
創(chuàng)建一個徑向/圓漸變。使用漸變填充矩形:
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); // Create gradient var grd=ctx.createRadialGradient(75,50,5,90,60,100); grd.addColorStop(0,"red"); grd.addColorStop(1,"white"); // Fill with gradient ctx.fillStyle=grd; ctx.fillRect(10,10,150,80); </script> </body> </html>測試看看 ?/?
把一幅圖像放置到畫布上, 使用以下方法:
drawImage(image,x,y)
把一幅圖像放置到畫布上:
JavaScript:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基礎(chǔ)教程(cainiaoplus.com)</title> </head> <body> <p>Image to use:</p> <img id="scream" src="img_the_scream.jpg" alt="The Scream" width="220" height="277"><p>Canvas:</p> <canvas id="myCanvas" width="250" height="300" style="border:1px solid #d3d3d3;"> 您的瀏覽器不支持 HTML5 canvas 標簽。</canvas> <script> var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var img=document.getElementById("scream"); img.onload = function() { ctx.drawImage(img,10,10); } </script> </body> </html>測試看看 ?/?
標簽的完整屬性可以參考Canvas 參考手冊.
Tag | 描述 |
<canvas> | HTML5 的 canvas 元素使用 JavaScript 在網(wǎng)頁上繪制圖像。 |