arc()不显示圆是因为它只添加路径而不渲染,需配合beginpath()、stroke()/fill()及正确颜色设置;参数中角度须用弧度,圆心不能越界。

直接画圆必须用 arc(),但只调用它什么都不会显示——它只是“加一段路径”,不是“画出来”。
为什么 arc() 调用了却没看到圆
这是最常卡住的地方:canvas 的绘图是分阶段的,arc() 只负责把圆弧路径塞进当前路径里,不触发渲染。
- 漏掉
ctx.beginPath():上一次路径残留可能让新弧线被错误连接或闭合,甚至压根不生效 - 没调用
ctx.stroke()或ctx.fill():路径存在,但没描边/填充,等于白建 - 忘记设
ctx.strokeStyle或ctx.fillStyle:默认黑色描边、透明黑填充(#00000000),在深色背景上完全不可见 - 圆心坐标超出 canvas 范围,比如
canvas.width = 200却写arc(300, 300, 10, ...),圆心在画布外,弧线自然不出现
arc() 的 5 个参数怎么填才不翻车
函数签名是 ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise),后两个参数可选,但前 5 个全要填。
-
x和y是圆心坐标,以 canvas 左上角为原点,不是相对于当前路径起点 -
radius必须 ≥ 0;传负数、NaN或undefined会静默失败(无报错,也无图形) -
startAngle和endAngle单位是**弧度**,不是度数;常见错误是写90或180—— 这其实是 90 弧度(≈5157°),正确写法是Math.PI / 2(90°)、Math.PI(180°) -
anticlockwise默认false(顺时针);设true才逆时针。注意:它不改变角度数值含义,只改变绘制方向;即使startAngle > endAngle,设false仍会顺时针绕过 0 弧度
画整圆和画弧线的区别与写法
画整圆只是画弧线的一个特例:起始角为 0,结束角为 2 * Math.PI,方向无所谓(因为绕满一圈结果一样)。
- 画整圆(描边):
ctx.beginPath(); ctx.arc(100, 75, 50, 0, 2 * Math.PI); ctx.stroke(); - 画整圆(填充):
ctx.beginPath(); ctx.arc(100, 75, 50, 0, 2 * Math.PI); ctx.fill(); - 画四分之一圆弧(从 3 点钟到 6 点钟方向,顺时针):
ctx.beginPath(); ctx.arc(100, 75, 50, 0, Math.PI / 2); ctx.stroke(); - 画扇形(带填充的圆弧区域):需要补两条半径线 +
closePath(),再fill()
真正容易被忽略的是:canvas 绘图依赖精确的状态管理。一个没清空的路径、一个没重置的颜色、一次忘记的 beginPath(),都可能导致后续所有 arc() 表现异常——它不像 CSS 那样“所见即所得”,而更像一条需要手动拼装、手动触发的流水线。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











