【问题标题】:SVG path error: <path> attribute d: Expected numberSVG 路径错误:<path> 属性 d:预期数字
【发布时间】:2020-12-27 01:43:37
【问题描述】:

我正在使用一个布局库,它为我生成了一些路径,我正在尝试将它们转换为 SVG 路径。大多数路径看起来都很好,但有些路径会出错,我无法弄清楚原因。

例子:

<path d=" M0 0 C  0 90,  56 90,  56 279,  163 279, 163 309 z"></path>

我有一个 JSFiddle,您可以运行它并在控制台 here 中查看错误。

我得到的错误是:

错误:属性 d:预期数字,“…63 279, 163 309 z”。

【问题讨论】:

  • C 命令之后,需要有3 个坐标对的倍数(rwo 控制点和一个新的当前点)。上面有 5 个坐标对的路径缺少最后一个。
  • 您还需要一对坐标。由于最后一个命令是 z(关闭路径),您可以将第一次移动的坐标添加到 (M) 命令。请试试这个:` `

标签: svg d3.js


【解决方案1】:

所以你需要确保路径数据符合 SVG 的标准: https://www.w3.org/TR/SVG11/paths.html#DAttribute

如果您使用逗号来分隔值,那么应该一致地使用它:

"M0,0 C0,90 56,90 56,279 163,279 163,309 z"

如果不使用逗号:

"M 0 0 C 0 90 56 90 56 279 163 279 163 309 z"

更新:ccprog 是正确的,因为他认为一致性不是必需的。所以它更多的是一种方便/实践来保持一致。

现在您在控制台中观察到的错误问题是由于如何消除路径字母的规则:

命令字母可以在后续命令中删除,如果 同一命令连续多次使用(例如,您可以删除 “M 100 200 L 200 100 L -100 -200”中的第二个“L”并使用“M 100 200 L” 200 100 -100 -200")。

基本上在您的情况下浏览器认为您正在连续使用三次贝塞尔曲线:

"M0,0 C0,90 56,90 56,279 C163,279 163,309 z"

因此它将“z”解释为三次贝塞尔曲线预期的最后一个坐标。

您可以通过添加缺失点或显式使用不同的命令来消除错误。

【讨论】:

  • 你说得对,我的数据不一致。我按照您建议的方式尝试了它,但仍然遇到相同的错误。
  • 我按照提供的链接 (JSfiddle) 并没有显示任何错误。您可以发布该问题的链接吗?你用的是什么浏览器?
  • jsfiddle.net/teserract101/8uhdmjvr/4 -> 我在 chrome 开发者控制台中看到了这个问题。你什么都没看到?
  • 哦,现在我明白了。好的,我知道发生了什么。让我更新答案。
  • 路径命令中不需要使用逗号和空格的一致性。 grammar 允许所有可能的组合,只要数字可以被贪婪的解析器清楚地识别。
猜你喜欢
  • 2018-07-23
  • 1970-01-01
  • 2021-12-20
  • 2017-10-04
  • 2021-11-27
  • 2020-05-02
  • 2021-02-13
  • 1970-01-01
  • 2019-09-23
相关资源
最近更新 更多