У меня есть сетевая диаграмма (график с силовым движением), диаграмма рассеяния и таблица, которые все взаимосвязаны (см. jsFiddle). У меня есть межсоединения, работающие так, как я хочу их для событий mouseover. Я хотел бы изменить свой код, чтобы при наведении мыши на node на сетевой диаграмме выделен не только выделенный moused-over node (и его соединения в диаграмме рассеяния и таблице), но и его ближайшие соседние узлы (а также их соединения в диаграмме рассеяния и таблице).
function isConnected(a, b) {
return linkedByIndex[a.index + "," + b.index] || linkedByIndex[b.index + "," + a.index] || a.index == b.index;
}
Я хотел бы включить эту функцию в мои события mouseover, возможно, с помощью оператора 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");
//}
});