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

JS中CONTORNO数组传递异常,Canvas路径绘制不全问题排查

问题原因及修复方案

我一眼就看到两个关键问题导致你只画出了一个点:

1. 数组结构错误:重复属性被覆盖,路径点丢失

你在CONTORNO数组里,把所有lineTo的点都塞进了同一个对象里,重复定义了x属性:

{ tipo: "l", x: [0.06, 0], x: [0.06, 0.04], x: [0.14, 0.04], ..., x: [0, 1] }

在JavaScript中,对象里的同名属性会被最后一个值完全覆盖,所以这个对象最终只剩下x: [0, 1],前面所有的路径点都丢失了。

你的caminho函数是遍历数组的每个元素,每个元素对应一次moveTo或lineTo。原本你期望多个lineTo操作,但实际上数组里只有两个元素:一个"m"类型的起点,一个"l"类型的终点,自然只能画出一条线(或者因为没渲染,看起来像一个点)。

2. 缺少路径渲染步骤:定义了路径但没画出来

你的caminho函数里只调用了beginPath()、moveTo()和lineTo(),这些只是在内存里定义了路径的形状,但并没有把路径绘制到画布上。必须调用stroke()(描边)或者fill()(填充)才能让路径显示出来。


修复后的代码示例

修正数组结构

每个lineTo点都要作为单独的数组元素:

CONTORNO = [
  { tipo: "m", x: [0, 0] },
  { tipo: "l", x: [0.06, 0] },
  { tipo: "l", x: [0.06, 0.04] },
  { tipo: "l", x: [0.14, 0.04] },
  { tipo: "l", x: [0.14, 0] },
  { tipo: "l", x: [0.24, 0] },
  { tipo: "l", x: [0.24, 0.04] },
  { tipo: "l", x: [0.34, 0.04] },
  { tipo: "l", x: [0.34, 0] },
  { tipo: "l", x: [0.44, 0] },
  { tipo: "l", x: [0.44, 0.04] },
  { tipo: "l", x: [0.54, 0.04] },
  { tipo: "l", x: [0.54, 0] },
  { tipo: "l", x: [0.64, 0] },
  { tipo: "l", x: [0.64, 0.04] },
  { tipo: "l", x: [0.74, 0.04] },
  { tipo: "l", x: [0.74, 0] },
  { tipo: "l", x: [0.8, 0] },
  { tipo: "l", x: [0.8, 1] },
  { tipo: "l", x: [0.40, 0.55] },
  { tipo: "l", x: [0, 1] }
];

修正渲染步骤

在调用caminho之后,添加描边操作:

var c = document.getElementById("acanvas").getContext("2d");
caminho(c, CONTORNO);
c.stroke(); // 关键:把定义好的路径画出来

这样修改后,循环就能遍历所有路径点,并且把完整的路径渲染到画布上了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:06:32