- HTML Canvas 教程
- HTML Canvas - 首頁
- HTML Canvas - 簡介
- 環境設定
- HTML Canvas - 第一個應用程式
- HTML Canvas - 繪製二維圖形
- HTML Canvas - 路徑元素
- 使用路徑元素繪製二維圖形
- HTML Canvas - 顏色
- HTML Canvas - 新增樣式
- HTML Canvas - 新增文字
- HTML Canvas - 新增影像
- HTML Canvas - 畫布時鐘
- HTML Canvas - 變換
- 合成和裁剪
- HTML Canvas - 基本動畫
- 高階動畫
- HTML Canvas API 函式
- HTML Canvas - 元素
- HTML Canvas - 矩形
- HTML Canvas - 直線
- HTML Canvas - 路徑
- HTML Canvas - 文字
- HTML Canvas - 顏色和樣式
- HTML Canvas - 影像
- HTML Canvas - 陰影和變換
- HTML Canvas 有用資源
- HTML Canvas - 快速指南
- HTML Canvas - 有用資源
- HTML Canvas - 討論
HTML Canvas - 使用路徑元素繪製二維圖形
本章將討論如何使用 HTML5 的各種路徑元素繪製各種二維圖形。
Canvas 元素中使用名為 `rect()` 的方法建立矩形。它使用了路徑的概念,其語法是rect(x, y, width, height)
此方法繪製一個矩形,其左上角由 (x, y) 指定,並具有給定的寬度和高度。要執行此方法,必須使用引數 x 和 y 呼叫 `moveTo()`,以便指標移動到可以從中繪製矩形的座標。
同樣,我們可以使用這些路徑元素建立其他二維圖形。在 Canvas 元素中使用路徑建立圖形的步驟如下:步驟 1 - 建立路徑:此步驟通常使用 `beginPath()` 函式完成,該函式建立用於構建實際圖形的路徑。
步驟 2 - 使用繪圖命令繪製到路徑中:要使用 Canvas 繪製圖形,我們使用 `lineTo()` 和 `moveTo()` 等函式來繪製所需的路徑。
步驟 3 - 使用 `stroke` 或 `fill` 方法構造圖形:繪製路徑後,我們使用 `fill()` 和 `stroke()` 方法使生成的路徑圖形更易於理解。然後,我們將使用 `closePath()` 函式完成路徑。
繪製三角形
從數學上講,三條線的交點被認為是一個三角形。它由三條以特定角度相交的線組成。相交的線稱為三角形的頂點。
要繪製三角形,我們必須使用路徑函式。三角形是使用 `lineTo()` 函式透過三條線繪製的。我們首先開始路徑並移動到繪製線的點,然後使用 `lineTo()` 直到形成三角形。我們必須確保提供給函式的座標必須構成一個三角形。我們可以使用所需的函式(例如形狀、漸變等)為形成的三角形新增屬性。
`lineTo()` 函式的語法是Canvas.lineTo(x, y);
其中涉及的引數是 x 和 y,它們表示要繪製線的點。我們必須首先使用 `moveTo()` 函式初始化起點。
示例
下面的示例使用路徑操作繪製三角形。程式程式碼如下所示
<!DOCTYPE html>
<html lang="en">
<head>
<title>Triangle</title>
</head>
<body onload="triangle();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function triangle() {
var canvas = document.getElementById('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(50, 100);
ctx.lineTo(100, 50);
ctx.lineTo(150, 100);
ctx.lineTo(50, 100);
ctx.fillStyle = "blue";
ctx.fill()
}
}
</script>
</body>
</html>
輸出
上面程式碼形成的三角形如下所示。我們可以修改座標並建立其他三角形,例如直角三角形和等腰三角形。我們也可以在指令碼末尾新增 `closePath()` 函式。如果我們在指令碼末尾沒有給出 `closePath()`,則路徑仍在執行且未停止。
繪製直線
當兩點以最小距離連線時,形成一條線。它是一個常見的數學形狀,用於繪製幾何圖形中的大多數形狀。
要使用路徑在 HTML5 Canvas 中繪製直線,我們應該使用兩種方法,`moveTo(x, y)` 和 `lineTo(x, y)`。要在 Canvas 上識別線條,我們必須使用 `stroke()` 或 `fill()`。`moveTo()` 方法定義游標在畫布上繪製的位置,而 `lineTo()` 方法定義線條端點的座標,`stroke()` 或 `fill()` 方法用於使線條在畫布元素上可見。除非使用者指定,否則 `stroke()` 或 `fill()` 的顏色為黑色。
用於繪製直線的函式語法如下:
Canvas.moveTo(x,y);
畫布游標從原點移動到點 (x, y)。
Canvas.lineTo(x, y);
從游標點到給定引數點 (x, y) 繪製一條線。
示例
我們將透過一些示例來清晰地理解它。以下示例將在畫布上繪製一個正方形,並使用直線繪製其對角線。實現如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Line-Diagonal</title>
<style>
<style>body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="line1();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function line1() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var x = 50;
var y = 50;
var width = 200;
var height = 200;
context.strokeRect(x, y, width, height);
context.moveTo(50, 50);
context.lineTo(250, 250);
context.stroke();
}
</script>
</body>
</html>
輸出
我們首先使用畫布上的矩形構造了一個正方形,其尺寸如上所示,並從其左上角座標 (x, y) 繪製一條線到右下角座標,新增 x 和 y 值 (x+width, y+height),因為它們遠離原點。請參考 Canvas 座標以清晰地理解這一點。上面程式碼的輸出如下所示。
示例
我們將處理另一個僅繪製直線的示例。讓我們使用直線繪製字母“h”和“i”。我們將使用 `lineWidth()` 和 `strokeStyle()` 使輸出易於理解並使其看起來更具吸引力。程式程式碼如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Line-'hI'</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="line2();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function line2() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.lineWidth = 5.0;
context.beginPath();
context.strokeStyle = 'green';
context.moveTo(50, 50);
context.lineTo(50, 200);
context.lineTo(50, 100);
context.lineTo(100, 100);
context.lineTo(100, 200);
context.stroke();
context.beginPath();
context.strokeStyle = 'green';
context.moveTo(200, 50);
context.lineTo(200, 200);
context.stroke();
}
</script>
</body>
</html>
輸出
以下程式碼的輸出如下所示。我們可以在 Canvas 元素中使用直線建立文字,但這很難實現。Canvas 還有文字繪圖函式,使操作更容易。我們將在本教程的後面部分使用文字。
使用直線繪製有趣的星形
我們將使用路徑方法繪製星形。星形可以透過結合一組路徑物件輔助的直線來簡單地繪製。我們必須編寫一個接受輸入並輸出星形的 JavaScript 函式。繪製星形的函式是 `star(R, X, Y, N)`,其中 R 是星形的中心,X 和 Y 是中心座標,N 是星形上需要繪製的尖峰數量。實現如下所示。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<title>Star</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="star();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
var ctx = document.getElementById("canvas").getContext("2d");
function star(R, X, Y, N) {
ctx.beginPath();
ctx.moveTo(X + R, Y);
for (var i = 1; i <= N * 2; i++) {
if (i % 2 == 0) {
var theta = i * (Math.PI * 2) / (N * 2);
var x = X + (R * Math.cos(theta));
var y = Y + (R * Math.sin(theta));
} else {
var theta = i * (Math.PI * 2) / (N * 2);
var x = X + ((R / 2) * Math.cos(theta));
var y = Y + ((R / 2) * Math.sin(theta));
}
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.fillStyle = "yellow";
ctx.fill();
ctx.fillStyle = "green";
ctx.stroke();
}
star(55, 100, 100, 5);
</script>
</body>
</html>
輸出
在畫布上形成的星形如下所示。
繪製弧線
要繪製任何帶有弧線的形狀,我們必須使用兩種可用的方法 `arc()` 和 `arcTo()`。讓我們瞭解每種方法的功能。
使用弧線繪製圓形
我們可以非常輕鬆地使用弧線繪製圓形。繪製圓形的有效方法是使用 `arc()` 和 `beginPath()` 方法。圓形的實現如下所示。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>arc()</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="circle();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function circle() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.beginPath();
context.arc(100, 100, 50, 1 * Math.PI, 5 * Math.PI);
context.stroke();
}
</script>
</body>
</html>
輸出
這段程式碼使用 `path()` 和 `arc()` 方法在畫布內繪製一個圓形。程式碼的輸出如下所示。
繪製曲線
在數學中,曲線是用於描述連續移動點的抽象路徑。此類路徑是使用方程生成的。
曲線是最常見的數學表示形式,具有許多應用。這些可以使用基於其接觸點的方法在 Canvas 上表示。可以使用 Canvas 繪製的曲線型別是二次和三次貝塞爾曲線。方法如下所示。
二次和三次貝塞爾曲線有何不同?
二次和三次貝塞爾曲線之間的基本區別在於,二次貝塞爾曲線有一個起點和一個終點 (x, y) 和一個控制點,而三次貝塞爾曲線使用兩個控制點和一個終點 (x, y)。
使用這些方法建立複雜形狀可能相當困難,因為我們在編寫程式碼時沒有任何視覺支援。因此,建議不要使用這些方法繪製複雜形狀,除非您精通上述所有方法。
使用曲線繪製簡單的愛心程式
讓我們使用曲線繪製一個簡單的有機愛心形狀。繪製程式碼如下所示。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Heart</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="curve();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function curve() {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.lineWidth = 5;
ctx.beginPath();
ctx.moveTo(300, 300);
ctx.bezierCurveTo(75, 37, 70, 25, 50, 25);
ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5);
ctx.bezierCurveTo(20, 80, 40, 102, 75, 120);
ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5);
ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25);
ctx.bezierCurveTo(85, 25, 75, 37, 75, 40);
ctx.fillStyle = "red";
ctx.fill();
}
</script>
</body>
</html>
輸出
這段程式碼給出一個紅色的愛心和一條對角線。這條線是由於函式中給出的輸入座標形成的,因為該點位於形狀之外。使用上述程式碼在 Canvas 上繪製的心形為
形狀組合
我們可以在 Canvas 元素上繪製一個或多個形狀的組合。唯一需要注意的是給定的座標與所需的輸出相匹配。由於我們組合了一個或多個形狀,因此必須相應地賦值。請參考網格以瞭解分配座標值的概念。
使用曲線和弧線繪製鴨子的臉
我們將使用圓形和弧線繪製一個簡單的鴨子臉。臉和眼睛使用圓形繪製,嘴巴使用弧線繪製。使用程式碼的實現如下所示。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<title>duck smile</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="smile();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function smile() {
var canvas = document.getElementById('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(75, 75, 50, 0, Math.PI * 2, true);
ctx.moveTo(110, 75);
ctx.fillStyle = "red";
ctx.fill();
ctx.arc(75, 75, 35, 0, Math.PI, false);
ctx.moveTo(65, 65);
ctx.fillStyle = "yellow";
ctx.fill();
ctx.arc(60, 65, 5, 0, Math.PI * 2, true);
ctx.moveTo(95, 65);
ctx.arc(90, 65, 5, 0, Math.PI * 2, true);
ctx.stroke();
}
}
</script>
</body>
</html>
輸出
Path 2D
我們可以使用任意數量的路徑和命令在畫布上繪製物件。為了簡化操作,Canvas 引入了 Path2D,它可以幫助我們輕鬆地構建繪圖。讓我們在一個程式中實現 Path2D 物件。
示例
以下示例使用 Path2D 物件將一個圓形插入正方形中。實現如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Path2D</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
<script>
function draw() {
var canvas = document.getElementById('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
var rectangle = new Path2D();
rectangle.rect(100, 100, 100, 100);
var circle = new Path2D();
circle.arc(150, 150, 25, 0, 2 * Math.PI);
ctx.stroke(rectangle);
ctx.fill(circle);
}
}
</script>
</head>
<body onload="draw();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
</body>
</html>
輸出
程式碼的輸出如下所示