原文:http://developer.mozilla.org/en/Canvas_tutorial/Basic_usage
好,現在開始我們的canvas探究之旅……
<canvas id="tutorial" width="150" height="150"></canvas>
乍看上去,該標簽類似于<img>,不過它不支持src和alt屬性,<canvas>標簽僅僅支持2個屬性:width和height。當寬度和高度沒有指定時,他們的默認值為300px和150px。該元素可以象任何普通的圖像一樣應用樣式(margin、border、background等)。但是這些樣式設置并不影響canvas實際的繪制效果。在后續的介紹中我們將知道這是如何發生的,當沒有在<canvas>上應用任何樣式的時候,其初始化默認是完全透明的。
其實我們還可以為canvas標簽指定id或者class等HTML元素都支持的屬性,尤其是為canvas指定一個id,將為今后在腳本操作時指定DOM起到一個關鍵的作用。
值得注意的是,由于canvas在目前來講,還不是一個被所有瀏覽器都支持的標簽,當一個瀏覽器不支持該標簽時,我們需要提供一個“fallback content”來進行告知。
很簡單,我們可以寫些提示信息在<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/clock.png" width="150" height="150" alt=""/></canvas>
在Apple的Safari瀏覽器的解析中,canvas標簽的表現有些類似于<img>,瀏覽器不檢測關門標記。所以,當canvas標簽被正常渲染后,標簽里面的“fallback content”也會一起顯示出來。當然,這個狀況在FireFox中不會存在。
如果不需要“fallback content”,一個簡單的“<canvas id="foo" ...></canvas>”會最大限度的兼容safari和FireFox瀏覽器,此時,safari瀏覽器只是簡單的忽略</canvas>標記,不過,一點影響都沒有。
當然,如果我們一定要寫點“fallback content”的話,我們可以運用一些CSS小技巧,將溢出的內容隱藏掉。
<canvas>標簽實際上創建了一個指定尺寸的畫板,供一個或多個指令進行渲染作畫。目前,我們只是注重于其2D渲染功能,不過將來,該標簽應該能夠支持一些更復雜的指令渲染,比如基于OpenGL指令的3D內容。
<canvas>初始只不過是一個空的畫板,如果想要讓它顯示些什么,首先需要腳本去訪問它。canvas帶有一個DOM方法:getContext。申明了這個方法,我們便可以獲得進行畫圖創作的一些內部函數,getContext方法帶有一個參數——context的維數。
var canvas = document.getElementById('tutorial');var ctx = canvas.getContext('2d');首先我們制定了一個canvas的DOM節點,并執行getContext方法來訪問“drawing contex”,目前支持的參數只有“2d”。
利用以下方法可以很好的規避不支持canvas標簽的瀏覽器:
var canvas = document.getElementById('tutorial');if (canvas.getContext){ var ctx = canvas.getContext('2d'); // drawing code here} else { // canvas-unsupported code here}這里提供一個簡單的模板,我們將在后面的例子中運用到這樣一個標準模板。
<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的方法,并在頁面加載完成后執行它。當然,如果你愿意,你完全可以由其他事件來觸發該函數。
在下面的示例中,我們畫了2個相互交疊的舉行,并且其中一個還加上了點alpha透明,接下來,我們將在后面的幾個實例中探索一下一些功能是如何實現的:

<html> <head> <script type="application/x-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>
新聞熱點
疑難解答