「用 Canvas 畫圖」修訂間的差異
出自 MozTW Wiki
| Danielwang(對話 | 貢獻) 小 (修樣板) | Danielwang(對話 | 貢獻)   (→使用路徑) | ||
| 行 41: | 行 41: | ||
| <code>fillRect</code>、<code>strokeRect</code>、與 <code>clearRect</code> calls 繪製填充、輪廓線、與透明的長方形。較複雜的形狀用路徑(path)。 | <code>fillRect</code>、<code>strokeRect</code>、與 <code>clearRect</code> calls 繪製填充、輪廓線、與透明的長方形。較複雜的形狀用路徑(path)。 | ||
| + | === 使用路徑 === | ||
| + | |||
| + | <code>beginPath</code> 函數開始一個新的路徑,<code>moveTo</code>、<code>lineTo</code>、<code>arcTo</code>、<code>arc</code>、與類似的函數加入路徑片段。路徑可用 <code>closePath</code> 把頭尾連起來。建立路徑之後你可以用 <code>fill</code> 或 <code>stroke</code> 來把路徑繪製到 canvas 上。 | ||
| + | |||
| + | [[Image:canvas_ex2.png|right|frame|範例二]] | ||
| + |  <html> | ||
| + |   <head> | ||
| + |    <script type="application/x-javascript"> | ||
| + |  function draw() { | ||
| + |    var canvas = document.getElementById("canvas"); | ||
| + |    var ctx = canvas.getContext("2d"); | ||
| + | |||
| + |    ctx.fillStyle = "red"; | ||
| + | |||
| + |    ctx.beginPath();                        // 開始路徑 | ||
| + |    ctx.moveTo(30, 30);                     // 移到 30, 30 | ||
| + |    ctx.lineTo(150, 150);                   // 作直線到 150, 150 | ||
| + |    ctx.quadraticCurveTo(60, 70, 70, 150);  // 作一元二次方程曲線到 70, 150 | ||
| + |    ctx.lineTo(30, 30);                     // 作直線到 30, 30 | ||
| + |    ctx.fill();                             // 塗滿路徑 | ||
| + |  } | ||
| + |     </script> | ||
| + |   </head> | ||
| + |   <body onload="draw()"> | ||
| + |     <canvas id="canvas" width="300" height="300"></canvas> | ||
| + |   </body> | ||
| + |  </html> | ||
| + | |||
| + | 呼叫 <code>fill()</code> 或 <code>stroke()</code> 會使得目前的路徑被用掉。要再塗滿或畫線的話,路徑必須要重建一次。 | ||
於 2005年10月23日 (日) 19:17 的修訂
「用 Canvas 畫圖」尚未編寫完成。你現在就可以編修本頁面,擴充本文內容。
簡介
Mozilla Firefox 1.5 裡有個新的,作用為可編程圖片的 HTML 元素。<canvas> 根據 WhatWG canvas 規格,而這又是根據 Apple Safari 裡的 <canvas> 實作。這元素可用來利用程式碼在客戶端上繪製圖表、介面、或其它自訂圖片。
<canvas> 會建立固定大小的繪圖空間,並會有一個或多個「繪製態」(rendering context)。在本文裡我們會專注在 2D 的繪製(這也是目前唯一有定義的繪製態)。在未來將會更多的繪製態來提供其它類別的繪製,例如使用 OpenGL 的 3D 繪製。
平面
2D 繪製態
簡單的範例
我們一開始先來一個簡單的,一個半透明正方形蓋在另一個正方形之上的範例:
<html>
 <head>
  <script type="application/x-javascript">
function draw() {
 var canvas = document.getElementById("canvas");
 var ctx = canvas.getContext("2d");
 ctx.fillStyle = "rgb(200,0,0)";  // 把「填滿樣式」設為紅 200 綠 0 籃 0
 ctx.fillRect (10, 10, 50, 50);   // 畫一個填充的長方形
 ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; // 把「填滿樣式」設為紅 0 綠 0 籃 200 透度 0.5
 ctx.fillRect (30, 30, 50, 50);          // 畫一個填充的長方形
}
  </script>
 </head>
 <body onload="draw()">
   <canvas id="canvas" width="300" height="300"></canvas>
 </body>
</html>
draw 函數先取得 canvas 元素,再取得 2d 態。ctx 這物件可用來實際在畫板上繪製。本範例以用 CSS 顏色設定 fillStyle(填滿樣式)與呼叫 fillRect 的方式來繪出兩個方形。第二個 fillStyle 是用 rgba() 來一併定義顏色與透度(alpha)的值。
fillRect、strokeRect、與 clearRect calls 繪製填充、輪廓線、與透明的長方形。較複雜的形狀用路徑(path)。
使用路徑
beginPath 函數開始一個新的路徑,moveTo、lineTo、arcTo、arc、與類似的函數加入路徑片段。路徑可用 closePath 把頭尾連起來。建立路徑之後你可以用 fill 或 stroke 來把路徑繪製到 canvas 上。
<html>
 <head>
  <script type="application/x-javascript">
function draw() {
  var canvas = document.getElementById("canvas");
  var ctx = canvas.getContext("2d");
  ctx.fillStyle = "red";
  ctx.beginPath();                        // 開始路徑
  ctx.moveTo(30, 30);                     // 移到 30, 30
  ctx.lineTo(150, 150);                   // 作直線到 150, 150
  ctx.quadraticCurveTo(60, 70, 70, 150);  // 作一元二次方程曲線到 70, 150
  ctx.lineTo(30, 30);                     // 作直線到 30, 30
  ctx.fill();                             // 塗滿路徑
}
   </script>
 </head>
 <body onload="draw()">
   <canvas id="canvas" width="300" height="300"></canvas>
 </body>
</html>
呼叫 fill() 或 stroke() 會使得目前的路徑被用掉。要再塗滿或畫線的話,路徑必須要重建一次。



