使用 D3库将 SVG 元素置于 z 顺序顶部的有效方法是什么?
我的具体场景是一个饼图,它突出显示(通过在 path
上添加一个 stroke
)鼠标在给定块上的时间。生成我的图表的代码块如下:
svg.selectAll("path")
.data(d)
.enter().append("path")
.attr("d", arc)
.attr("class", "arc")
.attr("fill", function(d) { return color(d.name); })
.attr("stroke", "#fff")
.attr("stroke-width", 0)
.on("mouseover", function(d) {
d3.select(this)
.attr("stroke-width", 2)
.classed("top", true);
//.style("z-index", 1);
})
.on("mouseout", function(d) {
d3.select(this)
.attr("stroke-width", 0)
.classed("top", false);
//.style("z-index", -1);
});
我已经尝试了一些选项,但到目前为止还没有运气。使用 style("z-index")
和调用 classed
都没有工作。
“ top”类在我的 CSS 中定义如下:
.top {
fill: red;
z-index: 100;
}
fill
语句的存在是为了确保我知道它正确地打开/关闭。
我听说使用 sort
是一种选择,但是我不清楚如何实现它来将“选中的”元素放在顶部。
更新:
我用下面的代码修复了我的特殊情况,它在 mouseover
事件上向 SVG 添加了一个新的弧线以显示突出显示。
svg.selectAll("path")
.data(d)
.enter().append("path")
.attr("d", arc)
.attr("class", "arc")
.style("fill", function(d) { return color(d.name); })
.style("stroke", "#fff")
.style("stroke-width", 0)
.on("mouseover", function(d) {
svg.append("path")
.attr("d", d3.select(this).attr("d"))
.attr("id", "arcSelection")
.style("fill", "none")
.style("stroke", "#fff")
.style("stroke-width", 2);
})
.on("mouseout", function(d) {
d3.select("#arcSelection").remove();
});