You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中arc()函数为何绘制直线?Canvas多圆绘制异常咨询

解决Canvas绘制多个圆形时出现多余水平线的问题

嘿,我一眼就看出问题所在啦!你遇到的这条多余水平线,是因为Canvas的2D绘图上下文会累积路径导致的——你每次调用arc()都是在同一个路径上添加内容,而不是重新开始新路径。

具体来说:

  • 第一次调用arc()后,路径的起点和终点都是第一个圆的(20,20)位置(因为是完整的圆)。
  • 第二次循环时,你直接调用arc(),Canvas会自动从上次路径的终点(也就是第一个圆的起点)画一条直线到第二个圆的起点(60,20),然后再绘制圆弧。这就是那条水平线的来源!

修复方案

只需要在每次绘制圆弧前,调用beginPath()方法来开启一条新的独立路径,这样每次的圆弧就不会和之前的路径连在一起了。

修改后的代码如下:

var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var distance_x_circle = 20;
var distance_y_circle = 20;

for (var i = 0; i < 8; i++) {
  context.beginPath(); // 关键:每次绘制前开启新路径
  context.arc(distance_x_circle, 20, 15, 0, 2 * Math.PI);
  context.stroke();
  distance_x_circle += 40;
}

原理补充

beginPath()会清空当前的路径列表,让后续的绘图命令(比如arc()、lineTo())都在新的路径上执行,这样每次stroke()的时候只会绘制当前路径的内容,不会把之前的路径也一起画出来。

内容的提问来源于stack exchange,提问作者Triumfatorul32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:30:33