如何使用Canvas带你画出整个特效世界?

Canvas 是一个强大的工具,可以用来创建各种特效和图形。以下是一个简单的示例,演示如何使用 Canvas 绘制一个旋转的矩形,以展示基本的动画效果。

示例代码:

运行效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<html>

<head>
<title>动画(旋转的矩形)</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="图形系统开发实战:基础篇 示例">
<meta name="author" content="hjq">
<meta name="keywords" content="canvas,ladder,javascript">
<script src="/examples/canvas-qa/canvas_1b/js/helper.js"></script>
</head>

<body style="overflow: hidden; margin:10px;">
<canvas id="canvas" width="500" height="500" style="border:solid 1px #CCCCCC;"></canvas>
</body>
<script>
// 从页面中获取画板对象
let canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d');
let angle = 0;
ctx.fillStyle = "green";
ctx.font = "40px 黑体";
ctx.textAlign = "center";
ctx.textBaseline = "middle";

// 绘制矩形
function drawProcess() {
ctx.save();
ctx.translate(250, 250);
ctx.rotate(toRadians(angle));
ctx.fillRect(-150, -60, 300, 120);
ctx.restore();

ctx.save();
ctx.fillStyle = "gold";
ctx.fillText(angle + "°", 250, 250);
ctx.restore();
}

/**
* 绘制帧
*/
function frame() {
// 清空画布
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制网格线
drawGrid('lightgray', 10, 10, ctx);
// 绘制进度栏
drawProcess();

// 判断是否继续动画
if (angle < 360) {
angle += 1;
animationFrame = window.requestAnimationFrame(frame);
}
}

// 开始动画
window.requestAnimationFrame(frame);
</script>

</html>

这个示例代码创建了一个 Canvas 元素,并在其中绘制了一个绿色的矩形。通过 requestAnimationFrame 方法,每10毫秒调用一次 frame 函数,以实现动画效果。在 frame 函数中,首先清除 Canvas 中的内容,然后保存当前的绘图状态。接着,清除整个 Canvas 的内容,将坐标原点移动到圆形中心,旋转 Canvas,绘制矩形,并恢复之前的绘图状态。最后,使用 requestAnimationFrame 方法每10毫秒调用一次 frame 函数,以实现旋转效果。你可以尝试修改参数和代码,以创建不同的特效和图形。