Was ist ein effektiver Weg, um ein SVG-Element mithilfe der D3-Bibliothek an die Spitze der Z-Ordnung zu bringen?
Mein spezielles Szenario ist ein Kreisdiagramm, das hervorhebt (durch Hinzufügen eines stroke
zu path
), wenn sich die Maus über einem bestimmten Teil befindet. Der Codeblock zum Generieren meines Diagramms ist unten:
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);
});
Ich habe ein paar Optionen ausprobiert, aber bisher kein Glück. Mit style("z-index")
und ruft classed
beide nicht funktioniert hat .
Die "Top" -Klasse ist in meinem CSS wie folgt definiert:
.top {
fill: red;
z-index: 100;
}
Die fill
Aussage soll sicherstellen, dass ich wusste, dass sie richtig ein- und ausgeschaltet wurde. Es ist.
Ich habe gehört, dass die Verwendung sort
eine Option ist, aber ich bin mir nicht sicher, wie sie implementiert werden soll, um das "ausgewählte" Element nach oben zu bringen.
AKTUALISIEREN:
Ich habe meine spezielle Situation mit dem folgenden Code behoben, der der SVG des mouseover
Ereignisses einen neuen Bogen hinzufügt , um ein Highlight anzuzeigen.
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();
});