<canvas>
元素
<canvas id="tutorial" width="150" height="150"></canvas>
<canvas>
看起來和 <img>
元素很相像,唯一的不同就是它並沒有 src 和 alt 屬性。
實際上,<canvas>
標籤只有兩個屬性—— width和height。
這些都是可選的,並且同樣利用 DOM properties 來設置。當沒有設置寬度和高度的時候,canvas會初始化寬度爲300像素和高度爲150像素。
該元素可以使用CSS來定義大小,但在繪製時圖像會伸縮以適應它的框架尺寸:如果CSS的尺寸與初始畫布的比例不一致,它會出現扭曲。
*注意: 如果你繪製出來的圖像是扭曲的, 嘗試在<canvas>
的屬性中明確規定寬和高,而不是使用CSS。
<canvas>
元素可以像任何一個普通的圖像一樣(有margin,border,background等等屬性)這些樣式,然而,不會影響在canvas中的實際圖像。當開始時沒有爲canvas規定樣式規則,其將會完全透明。
替換內容
<canvas>
元素不同於在其中的<img>
標籤,就像<video>
,<audio>
,或者 <picture>
元素一樣,很容易定義一些替代內容。由於某些較老的瀏覽器(尤其是IE9之前的IE瀏覽器)或者文本瀏覽器不支持HTML元素”canvas”,在這些瀏覽器上你應該總是能展示替代內容:
在<canvas>
標籤中提供了替換內容。支持<canvas>
的瀏覽器將會忽略在容器中包含的內容,並且只是正常渲染canvas。
就像這樣:
<canvas id="stockGraph" width="150" height="150">
current stock price: $3.15 +0.15
</canvas>
<canvas id="clock" width="150" height="150">
<img src="images/zero.png" width="150" height="150" alt=""/>
</canvas>
*注意不要忘掉</canvas>
結束標籤,如果結束標籤不存在,則文檔的其餘部分會被認爲是替代內容,將不會顯示出來。
如果不需要替代內容,一個簡單的
渲染上下文(The rendering context)
<canvas>
元素創造了一個固定大小的畫布,它公開了一個或多個渲染上下文,其可以用來繪製和處理要展示的內容。我們將會將注意力放在2D渲染上下文中。其他種類的上下文也許提供了不同種類的渲染方式;
canvas起初是空白的。爲了展示,首先腳本需要找到渲染上下文,然後在它的上面繪製。<canvas>
元素有一個叫做 getContext() 的方法,這個方法是用來獲得渲染上下文和它的繪畫功能。getContext()只有一個參數,上下文的格式。對於2D圖像而言,你可以使CanvasRenderingContext2D。
var canvas = document.getElementById('tutorial');
var ctx = canvas.getContext('2d');
代碼的第一行通過使用 document.getElementById() 方法來爲 <canvas>
元素得到DOM對象。一旦有了元素對象,你可以通過使用它的getContext() 方法來訪問繪畫上下文。
檢查支持性
替換內容是用於在不支持 <canvas>
標籤的瀏覽器中展示的。通過簡單的測試getContext()方法的存在,腳本可以檢查編程支持性。上面的代碼片段現在變成了這個樣子:
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
// 繪製代碼
} else {
// 不支持canvas
}
一個模板骨架
這裏的是一個最簡單的模板,我們之後就可以把它作爲之後的例子的起點。
<html>
<head>
<title>Canvas tutorial</title>
<script type="text/javascript">
function draw(){
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
}
}
</script>
<style type="text/css">
canvas { border: 1px solid black; }
</style>
</head>
<body onload="draw();">
<canvas id="tutorial" width="150" height="150"></canvas>
</body>
</html>
上面的腳本中包含draw()的函數,當頁面加載結束的時候就會執行這個函數。
下圖爲執行後的樣子:
一個簡單的小例旬
<html>
<head>
<script type="application/javascript">
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
// 渲染上下文
var ctx = canvas.getContext("2d");
// 紅色方塊
ctx.fillStyle = "rgb(200,0,0)"; // 定義顏色
ctx.fillRect (10, 10, 55, 50); // 指定位置
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, 55, 50);
}
}
</script>
</head>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>