以下是原文翻译成繁體中文的版本:

JavaScript - Canvas

# JavaScript - Canvas:數位繪圖初學者指南

你好啊,有志於成為程序員的你!我很興奮能成為你進入JavaScript和Canvas世界的引路人。作為一個教電腦科學超過十年的老師,我可以告訴你,Canvas是最有趣、最值得學習的主題之一。這就像在你的網頁瀏覽器裡擁有一個數位遊樂場!

## 什麼是Canvas?

在我們深入代碼之前,讓我們先了解Canvas是什麼。想像你有一張空白的紙和一套彩色筆。這其實就是Canvas在數位世界中的概念——在你的網頁上的一塊空白區域,你可以使用JavaScript在其中繪製任何你想要的东西!

Canvas隨著HTML5引入,並從此成為了一個強大的工具,用於在網頁瀏覽器中直接創建圖形、動畫甚至遊戲。這就像在你的代碼編輯器裡有一個迷你的藝術工作室!

## 使用JavaScript操作Canvas

現在,讓我們挽起袖子開始繪圖吧!首先,我們需要在HTML中設置我們的Canvas。

```html
<canvas id="myCanvas" width="400" height="200"></canvas>

這將創建一個寬400像素、高200像素的canvas元素。把它當作你的數位繪圖板。

開始使用Canvas

要在我們的canvas上開始繪圖,我們需要在JavaScript代碼中獲取對它的引用並獲取它的繪圖上下文。

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

getContext('2d')方法給我們一個2D繪圖上下文——我們將用來在canvas上繪圖的工具。

繪製形狀

讓我們從一些簡單的東西開始——繪製一個矩形!

ctx.fillStyle = 'blue';
ctx.fillRect(50, 50, 100, 75);

這段代碼繪製一個從坐標(50, 50)開始的藍色矩形,寬度為100像素,高度為75像素。這就像告訴你的數位筆,“嘿,在這裡畫一個藍色矩形,並讓它這麼大!”

繪製線條

現在,讓我們試著繪製一條線:

ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(200, 100);
ctx.stroke();

這段代碼開始一個新的路徑,將“筆”移動到(50, 50),然後繪製一條線到(200, 100),最後描繪路徑使其可見。這就像玩連線遊戲,但用的是代碼!

繪製圓形

我們來畫一個開心的臉吧?首先,讓我們為臉畫一個圓形:

ctx.beginPath();
ctx.arc(200, 100, 50, 0, Math.PI * 2);
ctx.fillStyle = 'yellow';
ctx.fill();
ctx.stroke();

這會畫出一個黃色填充、黑色輪廓的圓形。arc方法可能看起來有點嚇人,但把它當作是告訴你的筆,“在(200, 100)這裡畫一個半徑為50的圓,從0開始,一直繞一圈(那就是Math.PI * 2的意思)。”

添加文字

讓我們在canvas上添加一些文字:

ctx.font = '20px Arial';
ctx.fillStyle = 'black';
ctx.fillText('Hello, Canvas!', 10, 30);

這將字體設置為20像素的Arial,將顏色設置為黑色,並從位置(10, 30)開始寫“Hello, Canvas!”。

範例

現在我們已經介紹了基礎知識,讓我們來看一些有趣的範例,看看Canvas能夠真正做些什麼!

範例1:繪製一個房子

// 設置canvas
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// 繪製房子身體
ctx.fillStyle = 'brown';
ctx.fillRect(100, 100, 150, 100);

// 繪製屋頂
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(175, 50);
ctx.lineTo(250, 100);
ctx.fillStyle = 'red';
ctx.fill();

// 繪製門
ctx.fillStyle = 'blue';
ctx.fillRect(150, 150, 50, 50);

// 繪製窗戶
ctx.fillStyle = 'yellow';
ctx.fillRect(200, 120, 30, 30);

這段代碼繪製了一個簡單的房子,有棕色的身體、紅色的屋頂、藍色的門和黃色的窗戶。這就像用代碼塊而不是樂高積木來建造房子!

範例2:動畫圓形

讓我們讓東西移動起來!這裡有一個簡單的彈跳圓形動畫:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

let x = 50;
let y = 50;
let dx = 2;
let dy = 2;
const radius = 20;

function drawCircle() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2);
    ctx.fillStyle = 'green';
    ctx.fill();

    if (x + radius > canvas.width || x - radius < 0) {
        dx = -dx;
    }
    if (y + radius > canvas.height || y - radius < 0) {
        dy = -dy;
    }

    x += dx;
    y += dy;

    requestAnimationFrame(drawCircle);
}

drawCircle();

這段代碼創建了一個綠色的圓形,在canvas上彈跳。這就像創造你自己小小的Pong遊戲!

Canvas方法表

這裡有一些我們使用過的以及一些額外的常用Canvas方法:

方法 描述
fillRect(x, y, width, height) 繪製一個填充矩形
strokeRect(x, y, width, height) 繪製一個矩形輪廓
clearRect(x, y, width, height) 清除指定的矩形區域
beginPath() 開始一個新的路徑
moveTo(x, y) 將路徑移動到指定的點
lineTo(x, y) 繪製一條線到指定的點
arc(x, y, radius, startAngle, endAngle) 繪製一個弧或圓形
fill() 填充當前的路徑
stroke() 描繪當前的路徑
fillText(text, x, y) 在canvas上繪製填充文字
strokeText(text, x, y) 在canvas上繪製文字輪廓

記住,學習編程就像學習一門新語言。這需要時間和練習,但在你意識到之前,你將會用Canvas創造出令人驚奇的事物!繼續嘗試,嘗試結合不同的形狀和方法,最重要的是,享受其中的樂趣。誰知道呢?下一個大型的網絡遊戲可能就是用Canvas由你創建的!

Credits: Image by storyset