Javascript 当我使用D3将鼠标移到第二个SVG的元素上时,如何同时更新SVG中元素的颜色
我创建了两个不同的Javascript 当我使用D3将鼠标移到第二个SVG的元素上时,如何同时更新SVG中元素的颜色,javascript,d3.js,mouseover,Javascript,D3.js,Mouseover,我创建了两个不同的svg。一个包含带有数据点的图形,另一个包含三条线。线的颜色应该取决于所选的数据点,我还没有做到这一点(更多细节如下)。可以在以下位置找到JSFIDLE: 我想做的是,当我将鼠标移到数据点上方时,更改三行的颜色。我设法将所有行的颜色更改为相同的颜色,但实际上我想使用与相应数据点关联的颜色,但我不知道如何将存储在myColors中的颜色数据传递到设置行颜色的函数 相关代码如下所示。我将带有数据点的图形添加到mySvg中,当我将鼠标移到数据点上方时,我将它们的颜色更改为黑色,将另一
svg
。一个包含带有数据点的图形,另一个包含三条线。线的颜色应该取决于所选的数据点,我还没有做到这一点(更多细节如下)。可以在以下位置找到JSFIDLE:
我想做的是,当我将鼠标移到数据点上方时,更改三行的颜色。我设法将所有行的颜色更改为相同的颜色,但实际上我想使用与相应数据点关联的颜色,但我不知道如何将存储在myColors
中的颜色数据传递到设置行颜色的函数
相关代码如下所示。我将带有数据点的图形添加到mySvg
中,当我将鼠标移到数据点上方时,我将它们的颜色更改为黑色,将另一个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');
});
与许多d3问题一样,使用数据绑定很容易解决这个问题。自定义颜色可以绑定到附加到第二个SVG的行。由于您的数组
myColors
(由每行自定义颜色的数组组成)与其他数组(如names
、x1Val
、y1Val
等)具有相同的结构,因此它可以轻松集成到数据数组coords
中,用于将信息绑定到您的行:
var coords = d3.zip(names, x1Val, y1Val, x2Val, y2Val, myColors);
每行的数据稍后可以在mouseover
事件处理程序中用于圆设置行上的stroke
样式
.on('mouseover', function(d,i) {
// ...
d3.select('#myLines')
.selectAll("line")
.style("stroke", function(d) {
return d[5][i].color;
});
})
回调函数通过以下方式确定颜色:
d[5]
i
th对象。i
是这个圆的索引,它作为参数传递给事件处理程序,并通过闭包提供给stroke
回调.color
此外,我还更新了
mouseout
处理程序,以删除以前设置的stroke
样式,从而使线条重置为类sweedline
设置的默认颜色。至少在我看来,这种行为似乎不存在
d3.select('#myLines')
.selectAll("line")
.style("stroke", null);
我收到你的留言;-)这次我不确定,我是否理解你的问题。也许,这是因为我无法理解您试图用代码实现什么。我仍然错过了大局。无论如何,我已经用我认为是解决你问题的方法更新了你的答案。如果这解决了你的问题,我将在回答中进一步解释。@altocumulus:你是一个救生员!:)这正是我一直在寻找的,但我无法解决!是的,请把它作为一个附加评论的答案发布,我将接受(并投票)它。临界线似乎是“returnd[5][i].color;”请详细说明。给出“大局图”是很困难的,但这是我能想到的最好的最低限度的例子,我不得不承认,这个例子似乎确实不太合理。所以非常感谢你的努力!我只能在明天对你的答案发表评论,所以如果我不尽快回复,请不要感到惊讶。非常非常有帮助,再次感谢!似乎我必须在数据结构上投入更多的时间。对于我的实际问题,我必须从CSV或JSON文件中读取这些数据。接下来的挑战是从这些文件中获取数据结构“coords”,但我想有一些聪明的方法可以做到这一点。再次感谢,下一个问题再见!;)