### HTML5 Canvas 基本方法概述
HTML5 中的 `<canvas>` 元素提供了一个可以通过 JavaScript 进行绘制的区域。以下是常用的 Canvas API 方法及其功能说明:
#### 创建画布并获取上下文
要使用 Canvas 绘制图形,首先需要创建一个 `<canvas>` 元素,并通过 `getContext('2d')` 获取其绘图环境。
```html
<canvas id="myCanvas" width="500" height="300"></canvas>
<script>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d'); // 获取 2D 上下文
</script>
```
#### 设置样式和颜色
可以设置填充颜色、描边颜色以及全局透明度等属性。
- **fillStyle**: 设置填充颜色。
- **strokeStyle**: 设置线条颜色。
- **globalAlpha**: 设置全局透明度。
```javascript
ctx.fillStyle = 'blue'; // 设置填充颜色为蓝色[^1]
ctx.strokeStyle = 'red'; // 设置线条颜色为红色
ctx.globalAlpha = 0.5; // 设置半透明效果
```
#### 绘制矩形
Canvas 提供了几种用于绘制矩形的方法:
- **fillRect(x, y, width, height)**: 绘制一个填充矩形。
- **strokeRect(x, y, width, height)**: 绘制一个矩形轮廓。
- **clearRect(x, y, width, height)**: 清除指定矩形区域的内容。
```javascript
ctx.fillRect(50, 50, 150, 100); // 绘制一个填充矩形
ctx.strokeRect(70, 70, 100, 80); // 绘制一个矩形轮廓
ctx.clearRect(90, 90, 50, 40); // 清除部分矩形内容
```
#### 绘制路径
路径是由多个子路径组成的形状,通常由直线或曲线构成。
- **beginPath()**: 开始一条新路径。
- **moveTo(x, y)**: 将笔触移动到指定位置而不绘制任何东西。
- **lineTo(x, y)**: 添加一条从当前点到目标点的线段。
- **closePath()**: 关闭路径并将终点连接回起点。
- **stroke()**: 描边路径。
- **fill()**: 填充路径。
```javascript
ctx.beginPath(); // 开始新的路径
ctx.moveTo(100, 100); // 移动到起始点 (100, 100)
ctx.lineTo(200, 100); // 添加水平线段至 (200, 100)
ctx.lineTo(150, 200); // 添加斜线段至 (150, 200)
ctx.closePath(); // 自动关闭路径
ctx.stroke(); // 描边路径
ctx.fill(); // 填充路径
```
#### 绘制圆弧和椭圆
- **arc(x, y, radius, startAngle, endAngle, anticlockwise?)**: 绘制一段圆弧。
- **ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise?)**: 绘制椭圆形。
```javascript
ctx.beginPath();
ctx.arc(250, 150, 50, 0, Math.PI * 2, false); // 绘制一个完整的圆
ctx.stroke();
ctx.beginPath();
ctx.ellipse(350, 150, 60, 30, Math.PI / 4, 0, 2 * Math.PI, true); // 绘制旋转后的椭圆
ctx.stroke();
```
#### 文字处理
可以在 Canvas 上渲染文字。
- **fillText(text, x, y)**: 使用填充方式显示文字。
- **strokeText(text, x, y)**: 使用描边方式显示文字。
- **font**: 定义字体大小和风格。
- **textAlign**: 对齐方式(left, center, right)。
- **textBaseline**: 基准线调整(top, middle, bottom)。
```javascript
ctx.font = '30px Arial'; // 设置字体
ctx.textAlign = 'center'; // 居中文本
ctx.fillText('Hello World', 250, 150); // 显示填充文本
ctx.strokeText('Hello World', 250, 200); // 显示描边文本
```
#### 图像操作
支持加载外部图像并在 Canvas 上展示。
- **drawImage(image, dx, dy, dw, dh)**: 在指定坐标处绘制图片。
```javascript
const img = new Image();
img.src = 'example.jpg';
img.onload = function () {
ctx.drawImage(img, 0, 0, 200, 100); // 缩放后绘制图片
};
```
#### 变换与保存状态
- **translate(x, y)**: 平移原点。
- **rotate(angle)**: 顺时针旋转角度。
- **scale(x, y)**: 放缩比例。
- **save() 和 restore()**: 保存和恢复当前绘图状态。
```javascript
ctx.save(); // 保存当前状态
ctx.translate(250, 150);
ctx.rotate(Math.PI / 4);
ctx.scale(0.5, 0.5);
ctx.fillRect(-50, -50, 100, 100); // 绘制变换后的矩形
ctx.restore(); // 恢复之前的状态
```
---