设置 Canvas 上下文
获取并配置 2D 渲染上下文。
设置 Canvas 上下文 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 4 节课。
什么是 Canvas 接口
Canvas 接口允许您使用 JavaScript 在 <canvas> 元素上绘制二维图形。您会获得一个由像素组成的绘图表面,以及一组用于绘制形状、图像和文本的命令。
- 标记只需要一个
<canvas>标签。 - 所有绘图都通过一个上下文对象在 JavaScript 中完成。
<canvas id="board" width="320" height="200"></canvas>获取上下文
在画布元素上调用 getContext('2d'),即可获得一个 CanvasRenderingContext2D。每条绘图命令都通过这个对象执行。
const canvas = document.getElementById("board");
const ctx = canvas.getContext("2d");
console.log(ctx.constructor.name); // CanvasRenderingContext2D坐标系
原点 (0, 0) 位于左上角。X 向右增长,Y 向下增长。一个 320x200 的画布,其右下角位于 (320, 200)。
宽度和高度属性
width 和 height HTML 属性以像素为单位设置绘图缓冲区的大小。如果省略,默认值为 300x150。在 JS 中设置它们也会清除画布。
const canvas = document.getElementById("board");
canvas.width = 400;
canvas.height = 300;
console.log(canvas.width, canvas.height); // 400 300CSS 大小与缓冲区大小
CSS width/height 会拉伸画布在屏幕上的显示效果,但 NOT 会改变像素缓冲区。如果它们与属性值不同,绘图看起来会模糊或变形。请让两者保持同步,以获得清晰的输出。
canvas.width = 400; // buffer pixels
canvas.style.width = "400px"; // display size — match it处理高 DPI 屏幕
在 Retina 显示屏上,devicePixelRatio 通常为 2。请放大缓冲区并缩小上下文,这样线条才能保持清晰。
const dpr = window.devicePixelRatio || 1;
canvas.width = 400 * dpr;
canvas.height = 300 * dpr;
canvas.style.width = "400px";
canvas.style.height = "300px";
ctx.scale(dpr, dpr);设置填充和描边样式
绘图状态保存在上下文中。fillStyle 设置填充颜色,strokeStyle 设置轮廓颜色。它们接受任何 CSS 颜色字符串。
ctx.fillStyle = "#3498db";
ctx.strokeStyle = "rgba(231, 76, 60, 0.8)";
ctx.lineWidth = 4;您的第一个绘图
准备好上下文后,您就可以立即绘图。fillRect(x, y, w, h) 使用当前的 fillStyle 绘制一个填充矩形。
const ctx = document.getElementById("board").getContext("2d");
ctx.fillStyle = "tomato";
ctx.fillRect(20, 20, 150, 80);清除画布
clearRect(x, y, w, h) 会将矩形区域擦除为透明状态。清除整个缓冲区通常是每个动画帧的第一步。
ctx.clearRect(0, 0, canvas.width, canvas.height);保存和恢复状态
save() 将当前样式/变换压入堆栈;restore() 将其弹出并恢复。这样可以隔离临时修改。
ctx.save();
ctx.fillStyle = "green";
ctx.fillRect(0, 0, 50, 50);
ctx.restore(); // fillStyle reverts to previous value功能检测
使用前检查是否存在 getContext,以兼容非常老旧的浏览器。
const canvas = document.getElementById("board");
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
// safe to draw
} else {
console.log("Canvas not supported");
}快速检查
测试您对画布设置的理解。
回顾:画布设置
您已经学会:获取画布、调用 getContext('2d')、理解左上角原点、设置缓冲区大小与 CSS 大小、使用 devicePixelRatio 处理高 DPI,以及配置 fillStyle/strokeStyle。接下来将学习绘制形状和路径。
常见问题解答
「设置 Canvas 上下文」课时是免费的吗?
是的 — 「设置 Canvas 上下文」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 4 节课。
「设置 Canvas 上下文」这节课中我会学到什么?
获取并配置 2D 渲染上下文。 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「设置 Canvas 上下文」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 设置 Canvas 上下文
- 绘制形状和路径
- 处理图像和文本
- 使用 requestAnimationFrame 制作动画