• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Nodes wegschieben in D3.js?

milesdavis

New member
Hey Leute,
kennt sich einer von euch mit D3.js aus?
Ich nutze hier das Force-Layout und habe hier einen Code, mit dem ich einen Button klicke und somit eine Eigenschaft nutze, bei der ein unsichtbarer Radius um den ersten Nodes erzeugt wird und alle umgebenen Nodes wegschiebt. Die Größe dieses Radiuses wird dabei auf 300 gestellt. Hinzu kommt, dass ich dabei die roten Nodes wegfiltere und sie quasi deaktiviere. Sie werden also nicht abgestoßen, sondern bleiben auf ihrer Position. Dies wird mit
Code:
 d.fx = d.x;
 d.fy = d.y;
erreicht. d.fx ist quasi die fixed position auf der x_Achse und diese wird mit der aktuellen position auf der x_Achse d.x des Nodes gleich gesetzt. Gleiches wird für die y_Achse getan.
Code:
 .on("click", function(d) {

    node.filter(function() {
    return d3.select(this).attr("fill") === "red"
  }).each(function(d) {
    d.fx = d.x;
    d.fy = d.y;
  });

    d3.selectAll("circle").data().forEach(d => d.r = 5);
    d3.select(this).datum().r = 300;
    simulation.nodes(nodes);
    simulation.alpha(0.8).restart();
});

Der obige Code geht super. Nun habe ich hier ein Array namens
. In diesem Array sind eine Reihe Nodes gespeichert und ich definiere ich das Mittelelement
. Nun möchte ich das gleiche wie vorher erreichen, nämlich, dass die roten Nodes nicht weggepusht werden, der unsichtbare Radius vom Mittelknoten
sich auf 300 vergrößert und die restlichen Nodes wegschiebt. Nur leider funktioniert das nicht. Kann mir da einer helfen? Hier ist der nichtfunktionierende Code. Ich denke, dass man etwas an
machen müsste, welches man mit
simulation.nodes(nodes)
verwendet wird.



Code:
.on("click", function(d) {
  var mid = Math.floor((pat.length - 1) / 2);
    node.filter(function() {
    return d3.select(this).attr("fill") === "red"
  }).each(function(d) {
    d.fx = d.x;
    d.fy = d.y;
  });
    d3.selectAll("circle").data().forEach(d => d.r = 5);
    pat[mid].r =  300;
    simulation.nodes(nodes);
    simulation.alpha(0.8).restart();
});
 
mit dem ausschnitt kann keiner was anfangen, mach mal ein minimalbeispiel an welchem man sieht, in welcher beziehung die daten zueinander stehen.
 
Zurück
Oben