我有一个网络图(力导向图)、一个散点图和一个表,它们都是相互连接的(参见jsFiddle)。我的互连按照我希望它们用于鼠标悬停事件的方式工作。我想修改我的代码,以便当我将鼠标悬停在网络图中的一个节点上时,不仅突出显示鼠标悬停的节点(以及它在散点图和表格中的连接),而且它的直接相邻节点也突出显示(以及作为它们在散点图和表格中的连接)。
我在D3 力有向图中查看了突出显示选定节点、其链接及其子节点中的信息以寻求帮助。一路上的某个地方(不完全确定在哪里)我找到了一个帮助定义连接节点的函数示例,isConnected()
.
function isConnected(a, b) {
return linkedByIndex[a.index + "," + b.index] || linkedByIndex[b.index + "," + a.index] || a.index == b.index;
}
我想将此功能合并到我的鼠标悬停事件中,也许带有一个if()
语句,以便我可以做所有我想要的“突出显示”。但是,我是 D3 和 js 的新手,不知道如何设置它。
下面是我想修改的代码片段(来自jsFiddle )。对于其他示例的任何建议或指示,我将不胜感激。
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", function(d) { return "node " + d.name + " " + d.location; })
.call(force.drag)
.on("mouseover", function(d) {
// I would like to insert an if statement to do all of these things to the connected nodes
// if(isConnected(d, o)) {
d3.select(this).select("circle").style("stroke-width", 6);
d3.select(this).select("circle").style("stroke", "orange");
d3.select(this).select("text").style("font", "20px sans-serif");
d3.selectAll("rect." + d.location).style("stroke-width", 6);
d3.selectAll("rect." + d.location).style("stroke", "orange");
d3.selectAll("text." + d.location).style("font", "20px sans-serif");
d3.selectAll("tr." + d.name).style("background-color", "orange");
//}
})
.on("mouseout", function(d) {
// if(isConnected(d, o)) {
d3.select(this).select("circle").style("stroke-width", 1.5);
d3.select(this).select("circle").style("stroke", "gray");
d3.select(this).select("text").style("font", "12px sans-serif");
d3.selectAll("rect." + d.location).style("stroke-width", 1.5);
d3.selectAll("rect." + d.location).style("stroke", "gray");
d3.selectAll("text." + d.location).style("font", "12px sans-serif");
d3.selectAll("tr." + d.name).style("background-color", "white");
//}
});