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

如何在Canvas JS中填充由独立线条构成的闭合区域?

Canvas闭合区域填充失效解决方案

问题原因

填充失效的核心原因是绘制路径时错误多次调用moveTo()方法:

  • moveTo()作用是抬笔移动到指定坐标,不会生成两点间的连接路径
  • 你在每段lineTo()结束后都额外调用moveTo()移动到下一个起点,最终生成的是3条独立的不相连线段,没有形成连续闭合路径,fill()无法识别可填充的区域。

修复方案

仅保留第一次moveTo()定义路径起点即可,后续线段直接调用lineTo(),lineTo()默认从上一个路径终点开始绘制,不需要额外抬笔移动。
也可以在路径绘制完成后主动调用context.closePath()闭合路径,避免手动连接起点出现误差。

修复后完整代码

<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
    </style>
  </head>
  <body>
    <canvas id="myCanvas" width="978" height="900"></canvas>
    <script>
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');

      context.beginPath();
      // 仅首次需要moveTo定义起点
      context.moveTo(10, 10);
      context.lineTo(190, 190);
      // 去掉多余的moveTo,直接从上个终点绘制下一段
      context.lineTo(200, 280);
      // 直接连回起点,或者调用context.closePath()自动闭合
      context.lineTo(10, 10);
      context.fillStyle = '#8ED6FF';
      context.fill();
      context.stroke();
    </script>
  </body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:15:01