HTML DOM 画布
<canvas> 元素在 HTML 页面中定义了一个 位图 区域。
Canvas API 允许 JavaScript 在画布上 绘制图形。
Canvas API 可以绘制形状、线条、曲线、方框、文本和图像,并具有颜色、旋转、透明度和其他像素操作。
将画布添加到 HTML
您可以使用 <canvas>
标签将画布元素添加到 HTML 页面中的任何位置。
如何访问画布元素
您可以使用 HTML DOM 方法 getElementById()
访问 <canvas>
元素。
const myCanvas = document.getElementById("myCanvas");
要在画布上绘制,您需要创建一个 2D 上下文 对象。
const ctx = myCanvas.getContext("2d");
注意
HTML <canvas>
元素本身没有绘图能力。
您必须使用 JavaScript 来绘制任何图形。
getContext()
方法返回一个包含绘图工具(方法)的对象。
在画布上绘制
创建 2D 上下文后,您就可以在画布上绘制。
fillRect() 方法在位置 20,20 处绘制一个黑色矩形。矩形宽度为 150 像素,高度为 100 像素。
示例
const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");
ctx.fillRect(20, 20, 150, 100);
自己试一下 »
使用颜色
fillStyle 属性设置绘图对象的填充颜色。
示例
const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);
自己试一下 »
您还可以使用 document.createElement()
方法创建新的 <canvas>
元素,并将该元素添加到现有的 HTML 页面中。
示例
const myCanvas = document.createElement("canvas");
document.body.appendChild(myCanvas);
const ctx = myCanvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(20, 20, 150, 100);
自己试一下 »
路径
在画布上绘制的常用方法是
- 开始路径 - beginPath()
- 移动到一个点 - moveTo()
- 在路径中绘制 - lineTo()
- 绘制路径 - stroke()
示例
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(20, 20);
ctx.lineTo(20, 100);
ctx.lineTo(70, 100);
ctx.stroke();
自己试一下 »
完整的 Canvas API 参考
本参考涵盖了 getContext("2d") 对象的所有属性和方法,用于在画布上绘制文本、线条、方框、圆形、图片等。
绘图方法
只有 3 种方法可以直接在画布上绘制。
方法 | 描述 |
---|---|
fillRect() | 绘制一个“填充”的矩形。 |
strokeRect() | 绘制一个矩形(没有填充)。 |
clearRect() | 清除矩形内指定的像素。 |
路径方法
方法 | 描述 |
---|---|
beginPath() | 开始一条新路径或重置当前路径。 |
closePath() | 从当前点到起点添加一条线到路径。 |
isPointInPath() | 如果指定的点在当前路径中,则返回 true。 |
moveTo() | 将路径移动到画布上的一个点(不绘制)。 |
lineTo() | 在路径中添加一条线。 |
fill() | 填充当前路径。 |
rect() | 在路径中添加一个矩形。 |
stroke() | 绘制当前路径。 |
圆形和曲线 | |
bezierCurveTo() | 在路径中添加一个三次贝塞尔曲线。 |
arc() | 在路径中添加一个圆弧/曲线(圆形或部分圆形)。 |
arcTo() | 在路径的两个切线之间添加一个圆弧/曲线。 |
quadraticCurveTo() | 在路径中添加一个二次贝塞尔曲线。 |
文本
方法/属性 | 描述 |
---|---|
direction | 设置或返回用于绘制文本的方向。 |
fillText() | 在画布上绘制“填充”的文本。 |
font | 设置或返回文本内容的字体属性 |
measureText() | 返回一个包含指定文本宽度的对象 |
strokeText() | 在画布上绘制文本 |
textAlign | 设置或返回文本内容的对齐方式 |
textBaseline | 设置或返回绘制文本时使用的文本基线 |
颜色、样式和阴影
方法/属性 | 描述 |
---|---|
addColorStop() | 在渐变对象中指定颜色和停止位置 |
createLinearGradient() | 创建一个线性渐变(用于画布内容) |
createPattern() | 在指定方向上重复指定元素 |
createRadialGradient() | 创建一个径向/圆形渐变(用于画布内容) |
fillStyle | 设置或返回用于填充绘制的颜色、渐变或图案 |
lineCap | 设置或返回线的端点的样式 |
lineJoin | 设置或返回两条线交汇时创建的拐角类型 |
lineWidth | 设置或返回当前线宽 |
miterLimit | 设置或返回最大斜接长度 |
shadowBlur | 设置或返回阴影的模糊级别 |
shadowColor | 设置或返回用于阴影的颜色 |
shadowOffsetX | 设置或返回阴影在水平方向上与形状的距离 |
shadowOffsetY | 设置或返回阴影在垂直方向上与形状的距离 |
strokeStyle | 设置或返回用于描边的颜色、渐变或图案 |
变换
方法 | 描述 |
---|---|
scale() | 将当前绘制放大或缩小 |
rotate() | 旋转当前绘制 |
translate() | 重新映射画布上的 (0,0) 位置 |
transform() | 替换当前绘制的变换矩阵 |
setTransform() | 将当前变换重置为单位矩阵。然后运行 transform() |
图像绘制
方法 | 描述 |
---|---|
drawImage() | 将图像、画布或视频绘制到画布上 |
ImageData 对象/像素操作
方法/属性 | 描述 |
---|---|
createImageData() | 创建一个新的空白 ImageData 对象 |
getImageData() | 返回一个 ImageData 对象,该对象复制了画布上指定矩形的像素数据 |
ImageData.data | 返回一个包含指定 ImageData 对象的图像数据的对象 |
ImageData.height | 返回 ImageData 对象的高度 |
ImageData.width | 返回 ImageData 对象的宽度 |
putImageData() | 将图像数据(来自指定 ImageData 对象)放回画布上 |
合成
属性 | 描述 |
---|---|
globalAlpha | 设置或返回当前绘制的 alpha 或透明度值 |
globalCompositeOperation | 设置或返回新的图像如何绘制到现有图像上 |
其他方法
方法 | 描述 |
---|---|
clip() | 从原始画布上剪切任何形状和大小的区域 |
save() | 保存当前绘制上下文及其所有属性的状态 |
restore() | 恢复先前保存的状态和属性 |
createEvent() | |
getContext() | |
toDataURL() |
标准属性和事件
相关页面
画布教程:画布教程
HTML 教程:HTML5 画布
HTML 参考:HTML <canvas> 标签
浏览器支持
<canvas>
元素是 HTML5 标准 (2014)。
Canvas API
在所有现代浏览器中都受支持
Chrome | Edge | Firefox | Safari | Opera | IE |
是 | 是 | 是 | 是 | 是 | 9-11 |