HTML 画布 参考
<canvas> 元素在 HTML 页面中定义了一个位图区域。
Canvas API 允许 JavaScript 在画布上绘制图形。
Canvas API 可以绘制形状、线条、曲线、方框、文本和图像,并使用颜色、旋转、透明度和其他像素操作。
可以使用 <canvas>
标签在 HTML 页面的任何位置添加画布元素
可以使用HTML DOM 方法 getElementById()
访问 <canvas>
元素。
要在画布上绘制,需要创建一个2D 上下文对象
const myCanvas = document.getElementById("myCanvas");
const ctx = myCanvas.getContext("2d");
注意
HTML <canvas>
元素本身没有绘制功能。
必须使用 JavaScript 来绘制任何图形。
The 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 |