'''
#Parent svg
svg.append('g')
.selectAll("dot")
.data(storage)
.join("circle")
.attr("cx", function (d) { return x(d.x); })
.attr("cy", function (d) { return y(d.y); })
.attr("r", .5)
.style("fill", "green")
.on("mouseover", function (e, d) {
d3.select(this).transition()
.duration(200)
div.style("left", (e.pageX) + "px")
.style("top", (e.pageY - 28) + "px");
console.log(e, d);
div.transition()
.duration(500)
.style("opacity", 0);
div.transition()
.duration(200)
.style("opacity", .9);
div.html(
'X, Y: ' + d.x + ", "+ d.y +
"<br>Pin: " + d.pinName +
"<br>Net: " + d.netName);
s_data = storage.filter(a => a.netName ===d.netName);
#Child svg
svg.append('g')
.selectAll("dot")
.data(s_data)
.join("circle")
.attr("cx", function (d) { return x(d.x); })
.attr("cy", function (d) { return y(d.y); })
.attr("r", .5)
.style("fill", "red")
})
.on('mouseout', function(d,i){
d3.select(this).transition()
.duration('200')
.style('fill', 'green');
})
'''
最初,当我将鼠标悬停在任何一个点上时,所有的点都是绿色的,具有公共netName的点集将突出显示,在此之后,我无法返回正常状态,即,我希望所有的点再次变为绿色,以便我可以突出显示其他点并检查那里的分组。
1条答案
按热度按时间sy5wg1nm1#
请看下面的例子:
https://codepen.io/ccasenove/pen/RwyzZrV
我在每个点上都有一个唯一的
id
键和一个由一些点共享的netId
属性。如果在将数据绑定到一个d3选择时指定一个键函数,那么就可以获得一个具有相同netId的点的子选择,如下所示:函数d3
data
将返回更新选择,即已经存在于过滤数据中的点。因此,您可以在mouseover
和mouseout
函数中更改此更新选择的颜色。