Dies ist meine erste Frage zum Stacküberlauf. Bitte ertragen Sie mich, wenn ich Fehler mache. Ich habe hier viele Fragen gesucht und nicht genau das gefunden, wonach ich gesucht habe (in einem Fall habe ich es, weiß aber nicht, wie ich es umsetzen soll). Und es scheint, dass die einzigen Leute, die ähnliche Fragen gestellt haben, keine Antworten erhalten haben.D3 Layout erzwingen - Textumbruch und Knotenüberlappungen
Ich habe ein Kraft-Layout mit D3 erstellt und die Dinge funktionieren fast so, wie ich es möchte. Zwei Dinge, für die ich Probleme habe zu bearbeiten:
1) Knoten von der Überlappung fernhalten: Ja, ich habe Mike Bostocks Code für geclusterte Force-Layouts gelesen und erneut gelesen. Ich weiß nicht, wie ich das in meinen Code implementieren kann, ohne dass irgendwas schief geht! Ich habe versucht, diesen Code aus einem Tutorial, aber es fixiert meine Knoten in einer Ecke und gespreizte die Links auf der ganzen Leinwand:
var padding = 1, // separation between circles
radius=8;
function collide(alpha) {
var quadtree = d3.geom.quadtree(graph.nodes);
return function(d) {
var rb = 2*radius + padding,
nx1 = d.x - rb,
nx2 = d.x + rb,
ny1 = d.y - rb,
ny2 = d.y + rb;
quadtree.visit(function(quad, x1, y1, x2, y2) {
if (quad.point && (quad.point !== d)) {
var x = d.x - quad.point.x,
y = d.y - quad.point.y,
l = Math.sqrt(x * x + y * y);
if (l < rb) {
l = (l - rb)/l * alpha;
d.x -= x *= l;
d.y -= y *= l;
quad.point.x += x;
quad.point.y += y;
}
}
return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;
});
};
}
Sie können die zusätzlich zu der tick-Funktion in meiner Geige sehen (unten verlinkt) auf Kommentar .
2) Wickeln Sie meine Textbeschriftungen so ein, dass sie in die Knoten passen. Im Moment werden sie über den Hover auf den vollen Namen des Knotens erweitert, aber ich werde das irgendwann in einen Tooltip umwandeln (sobald ich diese Knicke herausgefunden habe, werde ich einen Tooltip herausfinden) - im Moment will ich nur die ursprünglichen, kurzen Namen wrap innerhalb der Knoten. Ich habe this answer und this answer (http://jsfiddle.net/Tmj7g/4/) angeschaut, aber wenn ich versuche, dies in meinen eigenen Code zu implementieren, reagiert es nicht oder landet Clustering alle Knoten in der oberen linken Ecke (??).
ist Jedwedes Eingang sehr geschätzt, und fühlt sich hier frei, meine Geige zu bearbeiten: https://jsfiddle.net/lilyelle/496c2bmr/
Ich weiß auch, dass alle meine Sprache nicht ganz konsistent ist oder der einfachste Weg, um den D3 Code zu schreiben - das ist, weil Ich habe viele Dinge aus verschiedenen Quellen kopiert und zusammengefügt und versuche immer noch herauszufinden, wie ich das am besten selbst schreiben kann. Jeder Rat in dieser Hinsicht wird ebenfalls geschätzt.
Oh. Meine. Güte. DANKE für diese fantastische Antwort und für die Erklärungen! Es macht jetzt viel mehr Sinn. Ich verstehe, was Sie mit dem Textumbruch meinen - ich denke, es ist etwas, das ich nur manuell anpassen muss. Jetzt, wo die Kollisionserkennung funktioniert, wird es einfacher. – lilyelle
@lilyelle, super - gerne helfen! Eine Sache: Wenn meine Antwort Ihr Problem löst, klicken Sie bitte auf das Häkchen-Symbol, um es zu akzeptieren. StackOverflow läuft auf Punkten, und indem Sie meine Antwort akzeptieren, bekomme ich einen Punkt dafür :) – meetamit