在D3.js中重新排序SVG(z-index)的元素

我意识到这个问题之前已被问到,但我无法深究它。

这是我的图表… http://www.gogeye.com/financialnews/piechart/index3.html

我想要做的就是在图表后面放置硬币。 我知道D3渲染它们是为了附加它们。

我试图重新附加硬币,但似乎无法让它工作。

我已经尝试重新排序,当事物被附加在DOM中,但不断出现错误可能是因为变量在被定义之前被调用等。

有人能举例说明如何用我的代码解决这个问题吗? 我不希望你为我做这项工作,但我已经把头发拉了很长时间,我似乎无法将其他人的例子用于我的。

谢谢

我建议使用svg g元素创建一些“层”,代表“组”。

渲染图表时,可以先定义图层:

 var layer1 = svg.append('g'); var layer2 = svg.append('g'); var layer3 = svg.append('g'); // etc... for however many layers you need 

然后,当您追加新元素时,您可以决定要将它们放在哪个层上,并且将它们分配给它们的顺序无关紧要,因为组元素已经添加到DOM中,并且是有序的。 例如:

 var layer1 = svg.append('g'); var layer2 = svg.append('g'); var redCircle = layer2.append('circle') .attr('cx', 50) .attr('cy', 50) .attr('r', 16) .attr('fill', 'red') var blueSquare = layer1.append('rect') .attr('x', 25) .attr('y', 25) .attr('width', 50) .attr('height', 50) .attr('fill', 'blue'); 

在这种情况下,即使最后创建蓝色方块,红色圆圈也会在蓝色方块上方可见。 这是因为圆和正方形是不同组元素的子元素,它们是按预定义的顺序。

这是上面例子的一个FIDDLE ,所以你可以看到它的实际效果。

这样做应该会在何时向图表中添加某些元素时进行大量的猜测,并且还有助于将元素组织成更合理的排列。 希望有所帮助,祝你好运。