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 strokezu 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 classedbeide nicht funktioniert hat .
Die "Top" -Klasse ist in meinem CSS wie folgt definiert:
.top {
fill: red;
z-index: 100;
}
Die fillAussage soll sicherstellen, dass ich wusste, dass sie richtig ein- und ausgeschaltet wurde. Es ist.
Ich habe gehört, dass die Verwendung sorteine 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 mouseoverEreignisses 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();
});