hand
_1_12_133
4
返回栏目
0k
3k
5k
1k
2k
0.2k
2k
1k
2k
3k
2k
3k
2k
3k
3k
0.3k
0k
2k
0k
1k
0.1k
0k
0k
2k
2k
3k
0.2k
3k
0k
2k
2k
2k
3k
2k
2k
0k
4k
2k
2k
0k
3k
3k
2k
2k
2k
1k
3k
1k
3k
2k
1k
0.8k
2k
0k
2k
2k
2k
2k
3k
0.4k
4k
2k
5k
2k
3k
2k
3k
3k
4k
2k
3k
2k
3k
0.7k
2k
0.8k
3k
2k
4k
2k
2k
2k
2k
2k
3k
3k
3k
3k
4k
3k
3k
0k
2k
2k
0k
3k
2k
3k
1k
2k
2k
3k
3k
3k
3k
5k
3k
3k
3k
4k
3k
5k
4k
4k
4k
4k
1k
2k
2k
2k
2k
2k
2k
1k
2k
3k
3k
3k
3k
3k
2k
3k
4k
2k
2k
3k
5k
3k
3k
3k
4k
3k
3k
2k
3k
5k
4k
3k
4k
4k
2k
3k
3k
1k
3k
4k
4k
2k
2k
2k
3k
2k
4k
2k
4k
2k
4k
1k
2k
1k
2k
2k
1k
2k
2k
2k
2k
2k
2k
1k
1k
4k
3k
2k
2k
3k
3k
6k
2k
8k
3k
7k
2k
3k
3k
4k
3k
5k
4k
3k
3k
2k
2k
3k
3k
2k
2k
2k
3k
2k
6k
4k
4k
4k
4k
3k
3k
2k
4k
2k
3k
3k
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
0k
返回前端 - HTML5栏目
作者:
贺及楼
成为作者
更新日期:2025-02-27 12:23:02
在 HTML5 中,<canvas>
元素为我们提供了强大的 2D 绘图功能。通过它,我们可以创建各种复杂的图形和动画。而图形的变换操作则是让我们能够更加灵活地控制图形的位置、大小和角度的重要手段。本文将详细介绍 HTML5 画布中 2D 绘图的图形变换操作,并给出相应的演示代码。
<canvas>
元素基础在开始介绍图形变换之前,我们先来简单回顾一下 <canvas>
元素的基本使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Basics</title>
</head>
<body>
<canvas id="myCanvas" width="400" height="400"></canvas>
<script>
// 获取 canvas 元素
const canvas = document.getElementById('myCanvas');
// 获取 2D 绘图上下文
const ctx = canvas.getContext('2d');
// 绘制一个矩形
ctx.fillStyle = 'blue';
ctx.fillRect(50, 50, 100, 100);
</script>
</body>
</html>
在上述代码中,我们首先创建了一个 <canvas>
元素,然后通过 getContext('2d')
方法获取 2D 绘图上下文。最后,使用 fillRect
方法绘制了一个蓝色的矩形。
平移操作可以改变画布的原点位置。translate(x, y)
方法将画布的原点移动到 (x, y)
坐标处。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Translate</title>
</head>
<body>
<canvas id="translateCanvas" width="400" height="400"></canvas>
<script>
const canvas = document.getElementById('translateCanvas');
const ctx = canvas.getContext('2d');
// 绘制原始矩形
ctx.fillStyle = 'red';
ctx.fillRect(50, 50, 100, 100);
// 平移画布
ctx.translate(150, 0);
// 绘制平移后的矩形
ctx.fillStyle = 'green';
ctx.fillRect(50, 50, 100, 100);
</script>
</body>
</html>
在这个例子中,我们先绘制了一个红色的矩形,然后使用 translate(150, 0)
将画布的原点向右移动了 150 个单位,接着绘制了一个绿色的矩形。可以看到,绿色矩形相对于红色矩形向右平移了 150 个单位。
旋转操作可以让图形绕着画布的原点旋转。rotate(angle)
方法接受一个弧度值作为参数,表示旋转的角度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Rotate</title>
</head>
<body>
<canvas id="rotateCanvas" width="400" height="400"></canvas>
<script>
const canvas = document.getElementById('rotateCanvas');
const ctx = canvas.getContext('2d');
// 移动到画布中心
ctx.translate(200, 200);
// 绘制原始矩形
ctx.fillStyle = 'blue';
ctx.fillRect(-50, -50, 100, 100);
// 旋转画布 45 度(转换为弧度)
ctx.rotate(Math.PI / 4);
// 绘制旋转后的矩形
ctx.fillStyle = 'yellow';
ctx.fillRect(-50, -50, 100, 100);
</script>
</body>
</html>
在这个例子中,我们先将画布的原点移动到画布的中心,然后绘制了一个蓝色的矩形。接着使用 rotate(Math.PI / 4)
将画布旋转了 45 度,最后绘制了一个黄色的矩形。可以看到,黄色矩形相对于蓝色矩形旋转了 45 度。
缩放操作可以改变图形的大小。scale(x, y)
方法接受两个参数,分别表示在 x 轴和 y 轴上的缩放比例。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Scale</title>
</head>
<body>
<canvas id="scaleCanvas" width="400" height="400"></canvas>
<script>
const canvas = document.getElementById('scaleCanvas');
const ctx = canvas.getContext('2d');
// 绘制原始矩形
ctx.fillStyle = 'purple';
ctx.fillRect(50, 50, 100, 100);
// 缩放画布
ctx.scale(2, 2);
// 绘制缩放后的矩形
ctx.fillStyle = 'orange';
ctx.fillRect(50, 50, 100, 100);
</script>
</body>
</html>
在这个例子中,我们先绘制了一个紫色的矩形,然后使用 scale(2, 2)
将画布在 x 轴和 y 轴上都放大了 2 倍,接着绘制了一个橙色的矩形。可以看到,橙色矩形的大小是紫色矩形的 4 倍。
我们可以将平移、旋转和缩放操作组合使用,以实现更加复杂的图形变换效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Canvas Combined Transformations</title>
</head>
<body>
<canvas id="combinedCanvas" width="400" height="400"></canvas>
<script>
const canvas = document.getElementById('combinedCanvas');
const ctx = canvas.getContext('2d');
// 平移画布
ctx.translate(200, 200);
// 旋转画布 30 度(转换为弧度)
ctx.rotate(Math.PI / 6);
// 缩放画布
ctx.scale(1.5, 1.5);
// 绘制矩形
ctx.fillStyle = 'pink';
ctx.fillRect(-50, -50, 100, 100);
</script>
</body>
</html>
在这个例子中,我们先将画布的原点移动到画布的中心,然后将画布旋转了 30 度,接着将画布在 x 轴和 y 轴上都放大了 1.5 倍,最后绘制了一个粉色的矩形。
变换操作 | 方法 | 描述 |
---|---|---|
平移 | translate(x, y) |
将画布的原点移动到 (x, y) 坐标处 |
旋转 | rotate(angle) |
让图形绕着画布的原点旋转 angle 弧度 |
缩放 | scale(x, y) |
在 x 轴和 y 轴上分别按 x 和 y 的比例缩放图形 |
通过这些图形变换操作,我们可以在 HTML5 画布中创建出更加丰富多样的图形和动画效果。希望本文能帮助你更好地掌握 HTML5 画布的 2D 绘图中的图形变换操作。
前端 - HTML5
整章节共240节
快分享给你的小伙伴吧 ~