CanvasRenderingContext2D.beginPath() 方法用于宣布开始绘制路径,或重置当前的路径。
moveTo、lineTo、closePath 等方法配合使用stroke 、fill 方法配合使用CanvasRenderingContext2D.moveTo() 方法可将一个新的子路径的起始点移动到指定坐标。该坐标以 Canvas 元素的左上端为基准。
语法
context.moveTo(x, y);
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 路径目标位置的横坐标 |
| y | number | 路径目标位置的纵坐标 |
<canvas id="canvas"></canvas>
const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');ctx.beginPath();ctx.moveTo(50, 50);ctx.lineTo(200, 50);ctx.stroke();
CanvasRenderingContext2D.closePath() 方法用于连接起始坐标与最终坐标点,闭合路径。
使用 closePath() 连接起始坐标与最终坐标点,闭合路径,完成完整的图形。如果没有子路径,即使使用 closePath() 也不会出现任何结果。
语法
context.closePath();
绘制直线步骤如下:
beginPath() 宣布开始绘制路径moveTo(x, y) 指定开始位置的坐标lineTo(x, y) 指定线的下一个坐标点stroke() 表示路径的轮廓绘制三角形步骤如下:
beginPath() 宣布开始绘制路径moveTo(x, y) 指定开始位置的坐标lineTo(x, y) 指定线段的下一个坐标点(第一条线)lineTo(x, y) 指定线段的下一个坐标点(第二条线)closePath(x, y) 闭合路径(绘制第三条线闭合图形)stroke() 表示路径的轮廓CanvasRenderingContext2D.lineTo() 方法添加一个新点,然后创建从该点到画布中最后指定点的线条(该方法并不会创建线条)。
请使用 stroke() 方法在画布上绘制确切的路径。
语法
context.lineTo(x, y);
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 路径的目标位置的 x 坐标 |
| y | number | 路径的目标位置的 y 坐标 |
CanvasRenderingContext2D.quadraticCurveTo() 方法通过使用二次贝塞尔曲线的指定控制点,向当前路径添加一个点。
注意:二次贝塞尔曲线需要两个点。第一个点是用于二次贝塞尔计算中的控制点,第二个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用 beginPath() 或 moveTo() 方法来定义开始点。
语法
context.quadraticCurveTo(cpx, cpy, x, y);
| 参数 | 说明 | 类型 |
|---|---|---|
| cpx | 贝塞尔控制点的 x 坐标 | number |
| cpy | 贝塞尔控制点的 y 坐标 | number |
| x | 结束点的 x 坐标 | number |
| y | 结束点的 y 坐标 | number |

quadraticCurveTo(cpx, cpy, x, y) 方法由 1 个控制点与 1 个追加坐标点绘制二维贝塞尔曲线。bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) 方法则是由 2 个控制点和 1 个追加坐标点绘制三维贝塞尔曲线。示例
beginPath() 方法宣布开始绘制路径moveTo(x, y) 指定开始位置的坐标quadraticCurveTo(x, y) 绘制二维贝塞尔曲线stroke() 表示路径轮廓CanvasRenderingContext2D.bezierCurveTo() 方法通过使用表示三次贝塞尔曲线的指定控制点,向当前路径添加一个点。
注意:三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用 beginPath() 和 moveTo() 方法来定义开始点。

quadraticCurveTo(cpx, cpy, x, y) 方法由 1 个控制点与 1 个追加坐标点绘制二维贝塞尔曲线。bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) 方法则是由 2 个控制点和 1 个追加坐标点绘制三维贝塞尔曲线。语法
context.bezierCurveTo();
| 参数 | 说明 | 类型 |
|---|---|---|
| cp1x | 第一个控制点的 x 轴坐标 | number |
| cp1y | 第一个控制点的 y 轴坐标 | number |
| cp2x | 第二个控制点的 x 轴坐标 | number |
| cp2y | 第二个控制点的 y 轴坐标 | number |
| x | 结束点的 x 轴坐标 | number |
| y | 结束点的 y 轴坐标 | number |
示例
beginPath() 方法宣布开始绘制路径moveTo(x, y) 指定开始位置的坐标bezierCurveTo(x, y) 绘制二维贝塞尔曲线stroke() 表示路径轮廓CanvasRenderingContext2D.arcTo() 方法绘制坐标与直线之间的连接圆弧。
语法
context.arcTo(x1, y1, x2, y2, radius);
| 参数 | 类型 | 说明 |
|---|---|---|
| x1 | number | 圆弧的半径为 0 时,直线与之前坐标 (x0,y0) 的连接点的 x 坐标 |
| y1 | number | 圆弧的半径为 0 时,直线与之前坐标 (x0,y0) 的连接点的 y 坐标 |
| x2 | number | 圆弧的半径为 0 时,直线与坐标 (x1,y1) 的连接点的 x 坐标 |
| y2 | number | 圆弧的半径为 0 时,直线与坐标 (x1,y1) 的连接点的 y 坐标 |
| radius | number | 圆弧的半径 |
圆弧半径 radius 为 0 时,参数 (x1, y1) 为前一坐标 (x0, y0) 与直线的连接点坐标。参数 (x2, y2) 为当圆弧半径 radius 的值为 0 时,坐标 (x1, y1) 与直线的连接点的坐标。这里的坐标都以 Canvas 元素的左上端为基准。
注意:参数 (x1, y1) 与 (x2, y2) 不是圆弧的开始点和终点。圆弧的开始点与终点是自动计算的。
参数 radius 为圆弧的半径,当圆弧的半径设置为负时,会显示出错(INDEX_SIZE_ERR)。
(x0, y0) 与点 (x1, y1) 的连接直线(x0, y0) 到圆弧开始点之间的直线(x0, y0) ➡️ 点 (x1, y1) ➡️ 点 (x2, y2) ,使用最短的半径 radius 圆弧连接CanvasRenderingContext2D.arc() 方法
arc 来创建圆,请把起始角设置为 0,结束角设置为 Math.PI * 2。stroke 和 fill 方法在画布上绘制实际的弧。语法
context.arc(x, y, radius, startAngle, endAngle [, anticlockwise])
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 圆弧中心的 x 坐标 |
| y | number | 圆弧中心的 y 坐标 |
| radius | number | 圆弧的半径 |
| startAngle | number | 圆弧开始的角度 |
| endAngle | number | 圆弧结束的角度 |
| anticlockwise | boolean | 可选。圆弧的作成方向逆时针(true)顺时针(false,默认值) |
实现原理
圆弧的开始角度与终点角度以 x 轴的正方向为回转基准。圆弧的生成方向由参数 anticlockwise 指定,开始角度与结束角度的计测方向为顺时针方向。

圆弧的生成方向以逆时针方向时为 true ,顺时针方向时为 false。省略时,也就是初始值为 false。如果圆弧的半径为负值时,会显示出错(INDEX_SIZE_ERR)。
角度的单位为弧度,弧度的单位值:角度÷ 180 × π
arc() 方法的基本实现过程
(x, y) 与圆弧半径 radius圆弧的开始角度与结束角度的差为 2π(360 度)以上的情况吓,圆弧为圆周全体。
CanvasRenderingContext2D.rect 通过设置矩形起点(x, y),尺寸 width 和 height ,以创建矩形路径的方法。此方法仅绘制矩形,调用 stoke() 或 fill() 后才会真正作用于画布。
context.rect(x, y, width, height);
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 矩形起点的横坐标 |
| y | number | 矩形起点的纵坐标 |
| width | number | 矩形的宽度 |
| height | number | 矩形的高度 |
CanvasRenderingContext2D.fill() 方法以根据当前的填充样式,填充当前或已存在的路径。采取非零环绕或者奇偶环绕规则。
语法
context.fill();
| 参数 | 类型 | 说明 |
|---|---|---|
| fillRule | nonzero | evenodd | 一种决定点在路径内还是路径外的算法:nonzero(非零环绕规则,默认规则)evenodd(奇偶环绕规则) |
| path | Path2D | 需要填充的 Path2D 路径 |
CanvasRenderingContext2D.stroke() 使用非零环绕规则,根据当前的画线样式,绘制当前或已经存在的路径的方法。
语法
context.stroke();
| 属性 | 类型 | 说明 |
|---|---|---|
| path | Path2D | 绘制的路径 Path2D |
显示路径时,会受到来自填充样式、线的样式的影响,当使用 stroke() 方法、fill() 方法显示时,路径将不受影响。路径上可以适用阴影、透明度、切割、合成等。
还有,路径上使用了变形时,绘制路径时将受其影响。stroke() 方法与 fill() 方法能够显示适用了变形的路径。
CanvasRenderingContext2D.clip() 方法用以将当前创建的路径设置为当前剪切路径。
语法
context.clip();context.clip(fillRule);context.clip(path, fillRule);
| 参数 | 类型 | 说明 |
|---|---|---|
| fillRule | nonzero | evenodd | 一种决定点在路径内还是路径外的算法:nonzero(非零环绕规则,默认规则)evenodd(奇偶环绕规则) |
| path | Path2D | 需要剪切的 Path2D 路径 |
示例
clip() 方法切割出需要的图形CanvasRenderingContext2D.isPointInPath() 用以判断在当前路径中是否包含检测点的方法。
语法
context.isPointInPath(x, y);context.isPointInPath(x, y, fillRule);context.isPointInPath(path, x, y);context.isPointInPath(path, x, y, fillRule);
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 监测点的横坐标 |
| y | number | 监测点的纵坐标 |
| fillRule | nonzero | evenodd | 一种决定点在路径内还是路径外的算法:nonzero(非零环绕规则,默认规则)evenodd(奇偶环绕规则) |
| path | Path2D | Path2d 应用的对象 |
返回值:布尔值,当检测点包含在当前或指定的路径内,返回 true,否则返回 false。
CanvasRenderingContext.isPointInStroke() 用于检测某点是否在路径的描边线上的方法。
语法
context.isPointInStroke(x, y);context.isPointInStroke(path, x, y);
| 参数 | 类型 | 说明 |
|---|---|---|
| x | number | 监测点的横坐标 |
| y | number | 监测点的纵坐标 |
| path | Path2D | Path2D 的路径 |
CanvasRenderingContext2D.drawFocusIfNedded() 用以给当前路径或特定路径绘制焦点的方法,如果给定的元素获取了焦点。
语法
context.drawFocusIfNeeded(element);context.drawFocusIfNeeded(path, element);
| 属性 | 类型 | 说明 |
|---|---|---|
| element | HTMLElement | 是否需要设置焦点的元素 |
| path | Path2D | Path2D 路径 |
CanvasRenderingContext2D.scrollPathIntoView() 方法用以将当前或给定的路径滚动到窗口。
语法
context.scrollPathIntoView();context.scrollPathIntoView(path);
| 参数 | 类型 | 说明 |
|---|---|---|
| path | Path2D | Path2D 路径 |