- HTML 畫布教程
- HTML 畫布 - 首頁
- HTML 畫布 - 簡介
- 環境設定
- HTML 畫布 - 第一個應用程式
- HTML 畫布 - 繪製二維形狀
- HTML 畫布 - 路徑元素
- 使用路徑元素繪製二維形狀
- HTML 畫布 - 顏色
- HTML 畫布 - 新增樣式
- HTML 畫布 - 新增文字
- HTML 畫布 - 新增影像
- HTML 畫布 - 畫布時鐘
- HTML 畫布 - 變換
- 合成和裁剪
- HTML 畫布 - 基本動畫
- 高階動畫
- HTML 畫布 API 函式
- HTML 畫布 - 元素
- HTML 畫布 - 矩形
- HTML 畫布 - 直線
- HTML 畫布 - 路徑
- HTML 畫布 - 文字
- HTML 畫布 - 顏色和樣式
- HTML 畫布 - 影像
- HTML 畫布 - 陰影和變換
- HTML 畫布有用資源
- HTML 畫布 - 快速指南
- HTML 畫布 - 有用資源
- HTML 畫布 - 討論
HTML 畫布 - 新增樣式
類似於顏色,我們還可以為 HTML5 Canvas 中提供的不同形狀新增各種樣式。讓我們一一看看它們。
線條樣式
在 HTML5 中繪製線條的一種方法是使用 lineTo 路徑元素。我們還可以使用各種樣式屬性來美化這些線條。
由於我們在畫布上建立的大多數物件都是使用線條繪製的,因此我們可以使用線條屬性來設定這些物件的樣式。用於設定線條樣式的屬性列在下表中。
| 序號 | 屬性和描述 | 示例影像 |
|---|---|---|
| 1 | lineWidth 可以使用此屬性分配繪製線條的寬度。任何線條的預設粗細值為 1 個單位。 |
![]() |
| 2 | lineCap 此屬性通常用於設定線條末端的樣式。此屬性有三個可接受的輸入值,分別為“butt”、“round”和“square”。預設值始終為“butt”。 |
![]() |
| 3 | lineJoin 當兩條線即將連線時,可以使用此屬性設定線條連線處的角的外觀。此屬性可接受的值為“miter”、“bevel”和“round”。此屬性的預設值為“miter”。此屬性不影響線條,因為沒有新增連線區域。 |
|
| 4 | miterLimit 當兩條線以銳角連線時,可以使用此屬性更改連線處的厚度。此屬性確定外部連線到內部連線點可以放置的距離。預設值為 10,但可能的值完全取決於所使用的線條。 |
![]() |
| 5 | lineDashOffset 這指定線條的虛線圖案。這用於製作點線和虛線圖案。我們也可以在 setLineDash() 方法中使用它並建立動畫效果。 |
![]() |
除了這些屬性外,還可以使用另外兩種方法為線條應用樣式。
getLineDash() 方法 - 返回當前線劃圖案,其中包含偶數個正數。
setLineDash() 方法 - 要設定虛線以使用 Canvas 建立形狀或圖案,可以使用此方法。它將線段陣列作為輸入,該陣列包含一些線值。如果沒有給出任何內容,則輸出為簡單的描邊線。
示例
以下程式碼演示了 lineWidth 和 lineCap 屬性。實現如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Styling lines</title>
<style></style>
</head>
<body onload="linestyles();">
<canvas id="canvas" width="300" height="200" style="border: 1px solid black;"></canvas>
<script>
function linestyles() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
// lineWidth property
context.moveTo(30, 30);
context.lineTo(30, 150);
context.lineWidth = 5;
context.stroke();
// linecap round property
context.beginPath();
context.moveTo(80, 30);
context.lineTo(80, 150);
context.lineWidth = 10;
context.lineCap = 'round';
context.stroke();
context.closePath();
// linecap butt property
context.beginPath();
context.moveTo(130, 30);
context.lineTo(130, 150);
context.lineWidth = 10;
context.lineCap = 'butt';
context.stroke();
context.closePath();
// linecap square property
context.beginPath();
context.moveTo(180, 30);
context.lineTo(180, 150);
context.lineWidth = 10;
context.lineCap = 'square';
context.stroke();
context.closePath();
}
</script>
</body>
</html>
輸出
以下程式碼的輸出如下所示。
示例
以下程式碼演示了 lineJoin 和 miterLimit 屬性。miterLimit 屬性分別使用“2 個單位”和“20 個單位”的值進行演示。程式碼如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Styling lines</title>
<style></style>
</head>
<body onload="linestyles();">
<canvas id="canvas" width="600" height="400" style="border: 1px solid black;"></canvas>
<script>
function linestyles() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
// linejoin round property
context.moveTo(30, 30);
context.lineTo(30, 150);
context.lineTo(150, 150);
context.lineTo(150, 30);
context.lineJoin = 'round';
context.lineWidth = 10;
context.stroke();
// linejoin bevel property
context.beginPath();
context.moveTo(200, 30);
context.lineTo(200, 150);
context.lineTo(320, 150);
context.lineTo(320, 30);
context.lineJoin = 'bevel';
context.lineWidth = 10;
context.stroke();
context.closePath();
// linejoin miter property
context.beginPath();
context.moveTo(370, 30);
context.lineTo(370, 150);
context.lineTo(490, 150);
context.lineTo(490, 30);
context.lineJoin = 'miter';
context.lineWidth = 10;
context.stroke();
context.closePath();
// miterlimit property with value 2
context.beginPath();
context.moveTo(50, 200);
context.lineTo(120, 350);
context.lineTo(190, 200);
context.miterLimit = 2;
context.lineJoin = 'miter';
context.lineWidth = 25;
context.stroke();
context.closePath();
// miterlimit property with value 20
context.beginPath();
context.moveTo(250, 200);
context.lineTo(320, 350);
context.lineTo(390, 200);
context.miterLimit = 20;
context.lineJoin = 'miter';
context.lineWidth = 25;
context.stroke();
context.closePath();
}
</script>
</body>
</html>
輸出
以下程式碼的輸出為
示例
以下示例使用setLineDash方法和lineDashOffset屬性值來指定用於使用線條繪製形狀的虛線圖案。實現程式碼如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Styling lines</title>
<style></style>
</head>
<body onload="linestyles();">
<canvas id="canvas" width="350" height="200" style="border: 1px solid black;"></canvas>
<script>
function linestyles() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');
var offset = 0;
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.setLineDash([50, 10]);
ctx.lineDashOffset = offset;
ctx.strokeRect(10, 10, 250, 125);
}
function animate() {
offset++;
if (offset > 25) {
offset = 0;
}
draw();
setTimeout(animate, 50);
}
animate();
}
</script>
</body>
</html>
輸出
程式碼返回如下所示的輸出。將程式碼貼上到編輯器中以檢視動畫效果。
漸變
就像在畫布元素上繪製形狀一樣,我們可以簡單地使用漸變填充和描邊形狀。畫布中提供三種類型的漸變,分別是線性漸變、徑向漸變和錐形漸變。我們可以使用三種方法建立漸變物件。每種方法都列在下表中。
| 序號 | 方法和描述 |
|---|---|
| 1 | createLinearGradient(x1, y1, x2, y2) 建立一個線性漸變物件,其起點為 (x1,y1),終點為 (x2,y2)。 |
| 2 | createRadialGradient(x1, y1, r1, x2, y2, r2) 此方法用於建立徑向漸變物件。它將兩個圓作為引數,其中第一個圓的半徑為 r1,中心座標為 (x1,y1)。第二個圓的半徑為 r2,其中心座標為 (x2,y2)。 |
| 3 | createConicGradient(angle, x, y) 要建立錐形漸變物件,可以使用此方法,該方法將起始角度(以弧度表示)和位置點 (x, y) 作為引數。 |
建立畫布漸變物件後,我們可以使用 addColorStop() 方法對其進行著色。其語法和引數如下所示。
Canvas.addColorStop(position, color) - 它為建立的畫布物件建立一個顏色停止點。引數 position 採用 0 到 1 之間的值,定義顏色在漸變中的位置。color 引數是要呈現給漸變物件的顏色輸入。單個漸變物件的顏色停止點的數量沒有限制。
示例 1(線性漸變)
以下示例顯示瞭如何實現線性漸變。程式碼如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Gradients</title>
<style></style>
</head>
<body onload="gradients();">
<canvas id="canvas" width="500" height="300" style="border: 1px solid black;"></canvas>
<script>
function gradients() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
// linear gradient
var lineargrad = context.createLinearGradient(0, 0, 200, 100);
context.fillStyle = lineargrad;
lineargrad.addColorStop(0, 'orange');
lineargrad.addColorStop(0.5, 'white');
lineargrad.addColorStop(1, 'green');
context.fillRect(10, 10, 190, 80);
}
</script>
</body>
</html>
輸出
從以上程式碼生成的線性漸變物件為
示例 2(徑向漸變)
以下程式碼演示瞭如何在畫布元素中實現徑向漸變。我們採用兩個圓心相同但半徑和顏色不同的圓來顯示漸變。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Gradients</title>
<style></style>
</head>
<body onload="gradients();">
<canvas id="canvas" width="400" height="400" style="border: 1px solid black;"></canvas>
<script>
function gradients() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
var radialgrad = context.createRadialGradient(150, 150, 25, 150, 150, 100);
radialgrad.addColorStop(0, 'orange');
radialgrad.addColorStop(1, 'blue');
context.fillStyle = radialgrad;
context.fillRect(10, 10, 300, 300);
}
</script>
</body>
</html>
輸出
以上程式碼生成的輸出為
示例 3(錐形漸變)
以下示例顯示瞭如何使用錐形漸變構建一個看起來像 3D 元素的漸變物件。它實際上是一個二維形狀。實現如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Gradients</title>
<style></style>
</head>
<body onload="gradients();">
<canvas id="canvas" width="400" height="400" style="border: 1px solid black;"></canvas>
<script>
function gradients() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
var conicgradient = context.createConicGradient(2, 62, 75);
conicgradient.addColorStop(0, 'white');
conicgradient.addColorStop(0.75, 'black');
context.fillStyle = conicgradient;
context.fillRect(12, 25, 200, 150);
}
</script>
</body>
</html>
輸出
以上程式碼生成的漸變物件為
圖案
在畫布上繪製繪畫。因此,在 HTML5 中創造了畫布元素這個名稱。畫布元素可用於使用圖案方法繪製和設計各種圖案,這些圖案非常吸引人,並且具有巨大的應用。它通常用於室內房屋設計。可以使用此屬性在畫布元素上繪製圖像圖案。用於建立圖案的方法如下所示
createPattern(image, type)
此方法建立一個畫布圖案物件,該物件在畫布內的給定空間中多次生成影像。引數“image”將影像和影片作為輸入,並將其製成圖案。“type”引數有四個可能的字串輸入,列在下面
repeat - 這會在水平和垂直位置列印輸入影像。
repeat-x - 影像僅在畫布元素上水平重複。
repeat-y - 影像垂直重複,但不水平重複。
no-repeat - 影像不重複,只使用一次。
此方法僅在載入影像後呼叫時才有效。如果未載入影像,則圖案繪製不正確,這可能會導致一些錯誤,導致圖案不顯示。
示例
讓我們使用此方法建立一個圖案。以下是實現
<html lang="en">
<head>
<title>Pattern</title>
<style>
#canvas {
background-color: black;
}
</style>
</head>
<body onload="pattern();">
<canvas id="canvas" width="555" height="555" style="border: 1px solid black;"></canvas>
<script>
function pattern() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d')
var image = new Image();
image.src = 'https://tutorialspoint.tw/themes/home/tp-diamond-logo-white.png';
image.onload = function() {
// change type parameter in the method to see how the pattern is displayed.
var pattern = context.createPattern(image, 'repeat');
context.fillStyle = pattern;
context.fillRect(0, 0, canvas.width, canvas.height);
}
}
</script>
</body>
</html>
輸出
以上程式碼生成的圖案如下所示
陰影
陰影使畫布元素內繪製的形狀更具動畫感。可以將四個屬性應用於畫布元素以使用陰影。它們列在下面
shadowOffsetX - 此屬性採用浮點值,表示陰影與形狀的水平距離。預設值為 0,並且屬性值不受變換矩陣的影響。使用負值會使陰影移動到形狀的左側。
shadowOffsetY - 此屬性指示陰影必須垂直延伸多遠。它採用浮點值作為輸入,預設值為 0。使用負值會使陰影移動到頂部。與上述屬性一樣,它不受變換矩陣的影響。
shadowBlur - 它指示陰影應模糊到什麼程度。它採用浮點值作為輸入。預設值為 0,它不指示畫素數。
shadowColor - 它採用標準 CSS 顏色作為輸入,並將其應用於陰影效果。預設情況下,它是透明黑色。
示例
以下示例演示了三種不同形狀中陰影的 shadowOffsetX 和 shadowOffsetY 屬性。第一個正方形顯示瞭如何使用 shadowOffsetX,第二個正方形顯示瞭如何實現 shadowOffsetY,第三個正方形同時使用了這兩個屬性。程式碼如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<title>shadow</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="shadow();">
<canvas id="canvas" width="555" height="200" style="border: 1px solid black;"></canvas>
<script>
function shadow() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
// using shadow offset x
context.beginPath();
context.shadowOffsetX = 20;
context.shadowColor = 'grey';
context.rect(50, 50, 75, 75);
context.fillStyle = 'blue';
context.fill();
context.closePath();
// using shadow offset y
context.beginPath();
context.shadowOffsetX = 0;
context.shadowOffsetY = 20;
context.shadowColor = 'grey';
context.rect(200, 50, 75, 75);
context.fillStyle = 'green';
context.fill();
context.closePath();
// using shadow offset x and y
context.beginPath();
context.shadowOffsetX = 30;
context.shadowOffsetY = 30;
context.shadowColor = 'grey';
context.rect(350, 50, 75, 75);
context.fillStyle = 'violet';
context.fill();
context.closePath();
}
</script>
</body>
</html>
輸出
以上程式碼生成的陰影為
示例
以下程式碼將 shadowBlur 和 shadowColor 屬性應用於畫布元素。
<!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>shadow</title>
<style>
body {
margin: 10px;
padding: 10px;
}
</style>
</head>
<body onload="shadow();">
<canvas id="canvas" width="200" height="200" style="border: 1px solid black;"></canvas>
<script>
function shadow() {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.shadowOffsetX = 20;
context.shadowOffsetY = 20;
context.shadowBlur = 10;
context.shadowColor = 'red';
context.arc(90, 90, 50, 1 * Math.PI, 5 * Math.PI);
context.fillStyle = 'black';
context.fill();
}
</script>
</body>
</html>
輸出
以上程式碼的輸出為



