MDN:Canvas的基本用法(一)

MDN鏈接:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial/Basic_usage

                <div> <div class="prevnext" style="text-align: right;">
<p><a href="/zh-CN/docs/Web/API/Canvas_API/Tutorial" style="float: left;">« 上一頁</a><a href="/zh-CN/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes">下一頁  »</a></p>

讓我們通過了解 <canvas> HTML 元素本身開始本教程。在本頁結束時,你會了解到如何去設置一個 canvas 2D 上下文以及如何在你的瀏覽器上創建第一個例子。

 <canvas> 元素

  <canvas id="tutorial" width="150" height="150"></canvas>

<canvas> 看起來和 <img> 元素很相像,唯一的不同就是它並沒有 src 和 alt 屬性。實際上,<canvas> 標籤只有兩個屬性—— widthheight。這些都是可選的,並且同樣利用 DOM properties 來設置。當沒有設置寬度和高度的時候,canvas會初始化寬度爲300像素和高度爲150像素。該元素可以使用CSS來定義大小,但在繪製時圖像會伸縮以適應它的框架尺寸:如果CSS的尺寸初始畫布的比例不一致它會出現扭曲

注意: 如果你繪製出來的圖像是扭曲的, 嘗試用width和height屬性爲<canvas>明確規定寬高,而不是使用CSS。

id屬性並不是<canvas>元素所特有的,而是每一個HTML元素都默認具有的屬性(比如class屬性)。給每個標籤都加上一個id屬性是個好主意,因爲這樣你就能在我們的腳本中很容易的找到它。

<canvas>元素可以像任何一個普通的圖像一樣(有marginborderbackground等等屬性)被設計。然而,這些樣式不會影響在canvas中的實際圖像。我們將會在一個專門的章節看到這是如何解決的。當開始時沒有爲canvas規定樣式規則,其將會完全透明。

替換內容

<canvas>元素與<img>標籤的不同之處在於,就像<video><audio>,或者 <picture>元素一樣,很容易定義一些替代內容由於某些較老的瀏覽器(尤其是IE9之前的IE瀏覽器)或者文本瀏覽器不支持HTML元素"canvas",在這些瀏覽器上你應該總是能展示替代內容。

這非常簡單:我們只是在<canvas>標籤中提供了替換內容。不支持<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/clock.png" width="150" height="150" alt=""/>
</canvas>

 </canvas> 標籤不可省

與 <img> 元素不同,<canvas> 元素需要結束標籤(</canvas>)。如果結束標籤不存在,則文檔的其餘部分會被認爲是替代內容,將不會顯示出來。

如果不需要替代內容,一個簡單的 <canvas id="foo" ...></canvas> 在所有支持canvas的瀏覽器中都是完全兼容的。

渲染上下文(The rendering context)

<canvas> 元素創造了一個固定大小的畫布,它公開了一個或多個渲染上下文,其可以用來繪製和處理要展示的內容。我們將會將注意力放在2D渲染上下文中。其他種類的上下文也許提供了不同種類的渲染方式;比如, WebGL 使用了基於OpenGL ES的3D上下文 ("experimental-webgl") 。

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');
  // drawing code here
} else {
  // canvas-unsupported code here
}

一個模板骨架

這裏的是一個最簡單的模板,我們之後就可以把它作爲之後的例子的起點。

注意: 爲了簡潔, 我們在HTML中內嵌了script元素, 但並不推薦這種做法。

<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()的函數,當頁面加載結束的時候就會執行這個函數。通過使用在文檔上加載事件來完成。只要頁面加載結束,這個函數,或者像是這個的,同樣可以使用 window.setTimeout(), window.setInterval(),或者其他任何事件處理程序來調用。

模板看起來會是這樣。如這裏所示最初是空白的

在 CodePen 中打開 在 JSFiddle 中打開

一個簡單例子

一開始,讓我們來看個簡單的例子,我們繪製了兩個有趣的長方形,其中的一個有着alpha透明度。我們將在接下來的例子裏深入探索一下這是如何工作的。

<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>

例子看起來像是這樣::

ScreenshotLive sample
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章