Який ефективний спосіб перенести елемент SVG у верхню частину z-порядку, використовуючи бібліотеку D3?
Мій конкретний сценарій - це кругова діаграма, яка виділяє (додаючи a stroke
до path
), коли миша знаходиться над даним фрагментом. Блок коду для створення моєї діаграми знаходиться нижче:
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
обох не працювали.
Клас "топ" визначається таким чином у моєму CSS:
.top {
fill: red;
z-index: 100;
}
fill
Заява там , щоб переконатися , я знав , що це включення / вимикання правильно. Це є.
Я чув, що використання sort
- це варіант, але мені незрозуміло, як це було б застосовано для виведення "вибраного" елемента вгору.
ОНОВЛЕННЯ:
Я виправив свою особливу ситуацію за допомогою наступного коду, який додає нову дугу до SVG на mouseover
події, щоб показати виділення.
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();
});