【发布时间】:2015-11-28 02:42:14
【问题描述】:
我创建了两个不同的SVGs。一个包含带有数据点的图形,另一个包含三条线。线条颜色应该取决于所选数据点,我还没有设法完成这项工作(下面有更多详细信息)。 jsfiddle 可以在这里找到:jsfiddle。
当我mouseover数据点时,我想做的是改变三行的颜色。我设法将所有线条的颜色更改为相同的颜色,但实际上想使用与相应数据点关联的颜色,但我不知道如何将存储在myColors 中的颜色数据传递给我设置线条颜色的功能。
相关代码如下所示。我将带有数据点的图形添加到mySvg,当我mouseover 数据点时,我将它们的颜色更改为黑色,将另一个SVG 中的线条颜色更改为绿色。但是,我实际上不想将所有线条的颜色更改为绿色,而是将它们的颜色更改为myColors 中定义的颜色(请参阅上面链接的 jsfiddle 以查找数据)。我怎么能这样做?
var circles = mySvg.selectAll("circle")
.data(lineData)
.enter()
.append("circle");
var circleAttributes = circles
.attr("cx", function (d) { return xScale(d.x); })
.attr("cy", function (d) { return yScale(d.y); })
.attr("r", 6)
.style("fill", 'red')
.on('mouseover', function(d){
d3.select(this).style("fill", 'black');
d3.select('#myLines').selectAll("line").attr("class","sweepline").style("stroke", 'green');
})
.on('mouseout', function(d){
d3.select(this).style("fill", 'red');
});
【问题讨论】:
-
我收到了你的信息 ;-) 这次我不确定,如果我理解你的问题。也许,那是因为我无法理解你试图用你的代码实现的目标。我仍然想念大局。无论如何,我已经用我认为可以解决您问题的方法更新了您的 JSFiddle。如果这解决了您的问题,我将把它放在一个答案中,并提供一些进一步的解释。
-
@altocumulus:你是救生员! :) 这正是我一直在寻找的,但我无法解决的问题!是的,请将其作为答案与其他 cmets 一起发布,我将接受(并投票)它。关键线似乎是'return d[5][i].color;'所以请详细说明。给出“大图”是困难的,但这是我能想到的最好的最小例子,我不得不承认它确实看起来不太合理。非常感谢您的努力!我只能在明天之前对您的回答发表评论,所以如果我没有尽快回复,请不要感到惊讶。
标签: javascript d3.js mouseover