Ich verwende ein D3-Force-Layout und versuche, untergeordnete Knoten zu reduzieren, während das Diagramm fest bleibt, z. indem Sie sie und die Opazität ihrer Links einfach ändern. Ich versuche jedoch nicht, alle Knoten gleichzeitig zu reduzieren - ich habe tatsächlich ein Attribut in jedem Knoten namens "group", das 1,2 oder 3 sein kann.D3 Layout erzwingen: Collapse Untergruppe von untergeordneten Knoten (Opazitätsänderung)
Wenn ich auf einen Knoten klicke, erscheint ein Tooltip mit 3 Schaltflächen für jede dieser Gruppen - wenn ich auf den richtigen Knopf klicke, möchte ich, dass der Kind-Knoten dieses Typs zusammenbricht, aber alle seine Kinder (von allen 3 Gruppen) zusammenfallen.
Hier ist die fiddle.
Ich habe bisher versucht Anordnungen der Knoten Gruppen-IDs und entsprechenden Verbindungs-IDs zu erstellen und dann JQuery verwenden, um die DOM-Objekte zu verstecken, aber das hat nicht funktioniert:
function collapseNodes(node, collapseType, isCollapsed) {
var collapseData = minimise(node, collapseType);
var cNodes = collapseData.nodes,
cLinks = collapseData.links;
console.log(collapseData);
var newClass = isCollapsed ? "uncollapsed" : "collapsed";
cNodes.forEach(function(n) {
d3.select(n).style("opacity", 0);
});
cLinks.forEach(function(l) {
d3.select(l).style("opacity", 0);
});
}
function minimise(node, assetMinType = "") {
// Function to minimise a node
var minNodes = [];
var minLinks = [];
if (node.group == 'asset') {
node.children.forEach(function(child) {
if (child.group == assetMinType)
minimiseRec(child, node.id);
});
}
else {
minimiseRec(node, "");
// We want to keep the top node and link
minNodes.shift();
minLinks.shift();
}
function minimiseRec(node, parentID) {
minNodes.push("#" + node.id);
minLinks.push("#parent_" + parentID + "_child_" + node.address);
node.children.map(function(child) {
minimise(child, node.id);
});
}
return { nodes: minNodes, links: minLinks };
}
Weiß jemand, wie man am besten um dies zu tun?
Danke.
Es tut mir leid, ich habe nicht genug Zeit, um es zu beenden. Die Logik ist ziemlich einfach, überprüfen Sie einfach, ob der Knoten zu der Gruppe gehört, die Sie verstecken möchten, und wenn es ist, verstecken Sie es und seine Kinder – thatOneGuy
Vielen Dank! – annikam