我有一个条形图,我想在点击一个条形图时改变颜色。我想在点击的元素上设置一个CSS类。除了填充样式(点击的条形图的颜色)没有改变外,其他一切都正常,但绿色的笔触被应用了。我不明白为什么。
这是单击图表
的最后一个条形之前和之后的屏幕
这就是我想要实现的
这是我的代码的一部分,有什么建议吗?
JS
//CREATE THE BAR CHART
var bars = d3
.select("#bars")
.selectAll("rect")
.data(data);
bars
.enter()
.append("rect")
.attr("x", function(d) {
return xScale(d.year);
})
.attr("y", function(d) {
return yScale(d.cost);
})
.attr("width", xScale.bandwidth)
.attr("height", function(d) {
return height - yScale(d.cost);
})
.style("fill", function(d) {
return colorScale(d.cost);
});
//EVENT ON CLICK
d3.select("#bars")
.selectAll("rect")
.on("click", function() {
//reset the previus bar selected
d3.select("#bars")
.select(".selected")
.classed("selected", false)
.style("fill", function(d) {
return colorScale(d.cost); //reset the original color
});
//set the current bar as selected
d3.select(this).classed("selected", true);
});
CSS格式
.selected {
fill: red;
stroke: green;
stroke-width: 3;
}
1条答案
按热度按时间cl25kdpy1#
通常,属性样式会被使用选择器的CSS样式覆盖,而选择器又会被内联CSS样式覆盖。
.attr("fill", "blue")
设置属性fill="blue"
;.selected { fill: "red"; }
应用fill: red;
样式;.style("fill", "green")
会设定属性style="fill: green;"
(内嵌样式)。如果你把所有这些应用到同一个元素,最后一个元素优先。通过取消选择一个先前选择的条形,你给予它
.style("fill"
,这样就覆盖了未来任何可能的样式。我建议你检查一下你是否真的需要应用这些样式,如果需要的话,就使用.attr()
。我在下面添加了一个小橱窗。
第一个