gpt4 book ai didi

svg - 是否可以在 d3.js 中导入 svg 形状?

转载 作者:行者123 更新时间:2023-12-02 06:11:42 25 4
gpt4 key购买 nike

使用 d3.js 的第一天,进展顺利,但我需要将占位符圆圈形状更改为更复杂的形状。

我在 Illustrator 中创建的 SVG 形状是否可以“导入”到 d3.js 图表中?

我知道我可以在 d3 中重画它...但我现在头疼...呃...

这是一个带有点的简单气泡:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="77px" height="41px" viewBox="0 0 77 41" enable-background="new 0 0 77 41" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#999999" d="M0,13C0,5.82,5.82,0,13,0h51c7.18,0,13,5.82,13,13s-5.82,13-13,13
H47l-7,15l-7-15H13C5.82,26,0,20.18,0,13z"/>
</svg>

可以作为形状导入吗?

或者有没有办法直接在 d3js 中翻译该路径?

谢谢!

最佳答案

如果“导入”是指成为页面标记的一部分,然后由您的 d3 代码使用,那么您可以使用 svg defs element保存您的自定义形状的定义。然后稍后在代码中创建 use引用它的元素:

var node = svg.selectAll("g.node")
.data(nodes)
.enter()
.append("g")
.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; } )

node.append("use")
.attr("xlink:href","#myshape")

这是上述方法的完整示例。我使用 Inkscape 但概念是相同的:

http://bl.ocks.org/explunit/5988971

请注意,svg 定义中的 xlink 命名空间对于 use 很重要元素正常工作,我看到你已经有了你的代码:

xmlns:xlink="http://www.w3.org/1999/xlink"

如果“导入”是指即时加载,则需要采用不同的方法,如 @LarsKotthoff 所建议的。但听起来您只是想重用现有的形状定义,而上述方法可以让您做到这一点。 <g> element设置形状的位置,然后子节点<use>添加以拉入之前定义的实际形状。

形状的定义在正文中的 svg 元素中,而不是在 javascript 本身中。这与许多 D3.js 示例不同,这些示例具有由 javascript 代码动态创建的 svg 元素。

两者之间的唯一联系是您放入 href 中的字符串 ID(本例中为“myshape”),以匹配 defs 中的 ID。部分:

node.append("use").attr("xlink:href","#myshape")

关于svg - 是否可以在 d3.js 中导入 svg 形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com