【发布时间】:2016-03-21 11:05:05
【问题描述】:
我正在使用 d3,但我在定位和空组方面遇到了麻烦。
我有这个 svg:
<svg id="mysvg" height="200" width="1350" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(50, 6)">
<g class="a">
<g transform="translate(0,161.3919677734375)" style="opacity: 1;">
<line y2="0" x2="-6"></line>
</g>
</g>
<g class="b">
</g>
</g>
</svg>
我想动态添加一条线与b类分组,我想添加它以便线的第一个点的坐标重合与a组内线的第二个点的坐标。
由于 SVG 对象的坐标是相对于它们的容器的,为了获得相对坐标,我首先使用 getBoundingClientRect() 获得 g.a 内线的绝对位置和 g.b 的绝对位置
问题是g.b 的坐标,如果为空,则完全混乱。我必须创建一个虚假对象才能正确获取它们:
d3.select("#mysvg .b").append("circle").attr("r", 0).attr("fill", "transparent")
.attr("cx", 0).attr("cy", 0);
此外,如果我创建半径大于零的圆,则其组b的位置将移动。
【问题讨论】:
-
Empty
<g>对象并没有真正的位置,因为它们会根据内容自动调整大小。如果你把东西放进去,<g>的位置应该会改变,这就是<g>元素的工作原理。 -
getBBox() 帮助我获得了 svg 元素的位置。也许你不知道这就是我提到它的原因。
标签: javascript d3.js svg