HTML5 畫布


<canvas> 標籤定義圖形,例如圖表和其他圖像,您必須使用腳本來繪製圖形。

在畫布上(Canvas)畫一個紅色矩形,漸層矩形,彩色矩形,和一些彩色的文字。



什麼是Canvas?       

 Internet Explorer


#HTML5 <canvas> ; 元素用於圖形的繪製,透過腳本(通常是JavaScript)來完成.

<canvas> 標籤只是圖形容器,您必須使用腳本來繪製圖形。

你可以透過多種方法使用Canva繪製路徑,盒、圓、字元以及新增影像。


瀏覽器支援

Internet Explorer

Internet Explorer 9+, Firefox, Opera, Chrome, 和Safari 支援<canvas> 元素.

注意: Internet Explorer 8 及更早IE 版本的瀏覽器不支援<canvas> 元素.


建立一個畫布(Canvas)

#一個畫佈在網頁中是一個矩形框,透過<canvas> 元素來繪製.

注意: 預設情況下<canvas> 元素沒有邊框和內容。

<canvas>簡單實例如下:

<canvas id="myCanvas" width="200" height="100"></canvas>

注意: 標籤通常需要指定一個id屬性(腳本中經常引用), width 和height 屬性定義的畫布的大小.

提示:你可以在HTML頁面中使用多個 <canvas> 元素.

使用style 屬性來添加邊框:

實例

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</title> 
</head>
<body>

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
您的浏览器不支持 HTML5 canvas 标签。
</canvas>

</body>
</html>

#運行實例»

#點擊"運行實例" 按鈕查看線上實例



使用JavaScript 來繪製圖像

canvas 元素本身是沒有繪圖能力的。所有的繪製工作必須在JavaScript 內部完成:

實例

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</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");

然後,建立context 物件:

var ctx=c.getContext("2d");

getContext("2d") 物件是內建的 HTML5 對象,擁有多種繪製路徑、矩形、圓形、字元以及新增圖像的方法。

下面的兩行程式碼繪製一個紅色的矩形:

ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

設定fillStyle屬性可以是CSS顏色,漸變,或圖案。 fillStyle 預設設定是#000000(黑色)。

fillRect(x,y,width,height) 方法定義了矩形目前的填滿方式。


Canvas 座標      

Internet Explorer

#canvas 是二維網格。

canvas 的左上角座標為 (0,0)

上面的 fillRect 方法擁有參數 (0,0,150,75)。

意思是:在畫布上繪製 150x75 的矩形,從左上角開始 (0,0)。

座標實例

如下圖所示,畫布的 X 和 Y 座標用於在畫布上對繪畫進行定位。在滑鼠移動的矩形框上,顯示定位座標。



Canvas - 路徑

在Canvas上畫線,我們將使用以下兩種方法:

  • moveTo(x,y) 定義線條開始座標

  • #lineTo(x,y) 定義線條結束座標

繪製線條我們必須使用到"ink" 的方法,就像stroke().

實例

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</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" 的方法, 例如

點擊"執行實例" 按鈕可查看線上實例


Canvas - 文字
  • 使用canvas 繪製文本,重要的屬性和方法如下:

  • font - 定義字型

    fillText(
  • text,x,y
  • ) - 在canvas 上繪製實心的文字

    strokeText(
  • text,x,y
) - 在canvas 上繪製空心的文字

點擊"運行實例"按鈕查看線上實例

##使用strokeText():

實例
###
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</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) - 建立線條漸變

  • createRadialGradient(x,y,r,x1,y1,r1) - 建立一個徑向/圓漸層

#當我們使用漸層對象,必須使用兩種或兩種以上的停止顏色。

addColorStop()方法指定顏色停止,參數使用座標來描述,可以是0至1.

使用漸變,設定fillStyle或strokeStyle的值為 漸變,然後繪製形狀,如矩形,文本,或一條線。

使用createLinearGradient():

實例

#
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</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():

#實例

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>php中文网(php.cn)</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>

##執行實例»

點擊"運行實例" 按鈕查看在線實例

Canvas - 圖像

把一幅圖像放置到畫布上, 使用以下方法:

drawImage(
    image,x,y
  • )


  • 實例
  • <!DOCTYPE html>
    <html>
    <head> 
    <meta charset="utf-8"> 
    <title>php中文网(php.cn)</title> 
    </head>
    <body>
    
    <p>Image to use:</p>
    <img id="scream" src="/upload/course/000/000/010/58049795194b5488.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>

    運行實例»

    點擊"運行實例" 按鈕查看線上實例


HTML Canvas 參考手冊


標籤的完整屬性可以參考Canvas 參考手冊.

The HTML <canvas> Tag

#Tag描述<canvas>#HTML5 的canvas 元素使用JavaScript 在網頁上繪製圖片。