Wie kann ich eine Linie zwischen zwei oder mehr Elementen zeichnen, um sie zu verbinden? Jede Kombination von HTML / CSS / JavaScript / SVG / Canvas ist in Ordnung.
Wenn Ihre Antwort eine dieser Antworten unterstützt, erwähnen Sie sie:
- ziehbare Elemente
- ziehbare / bearbeitbare Verbindungen
- Vermeidung von Elementüberlappungen
Diese Frage wurde aktualisiert, um die zahlreichen Variationen zu konsolidieren .
quelle
Das Verbinden von Linien mit SVGs war für mich einen Versuch wert und hat perfekt funktioniert. Zunächst einmal ist Scalable Vector Graphics (SVG) ein XML-basiertes Vektorbildformat für zweidimensionale Grafiken mit Unterstützung für Interaktivität und Animation. SVG-Bilder und ihr Verhalten werden in XML-Textdateien definiert. Sie können ein SVG in HTML mit
<svg>
Tag erstellen . Adobe Illustrator ist eine der besten Software zum Erstellen komplexer SVGs mithilfe von Pfaden.Vorgehensweise zum Verbinden von zwei Divs über eine Linie:
Erstellen Sie zwei Divs und geben Sie ihnen eine beliebige Position
(Zur Erklärung mache ich ein Inline-Styling, aber es ist immer gut, eine separate CSS-Datei für das Styling zu erstellen.)
<svg><line id="line1"/></svg>
Mit dem Linien-Tag können wir eine Linie zwischen zwei angegebenen Punkten (x1, y1) und (x2, y2) zeichnen. (für einen Referenzbesuch w3schools.) Wir haben sie noch nicht spezifiziert. weil wir jQuery verwenden werden, um die Attribute (x1, y1, x2, y2) des Zeilen-Tags zu bearbeiten.
im
<script>
Tag schreibenIch habe Selektoren verwendet, um die beiden Divs und Linien auszuwählen ...
Mit der jQuery-
position()
Methode können wir die aktuelle Position eines Elements ermitteln. Weitere Informationen finden Sie unter https://api.jquery.com/position/ (Sie können auch dieoffset()
Methode verwenden).Nachdem wir alle Positionen erhalten haben, die wir brauchen, können wir die folgende Linie ziehen ...
Die jQuery-
.attr()
Methode wird verwendet, um die Attribute des ausgewählten Elements zu ändern.Alles, was wir in der obigen Zeile getan haben, ist, dass wir die Attribute der Zeile von geändert haben
zu
als
position()
Erträge zwei Werte, ‚links‘ ein und andere ‚top‘, können wir sie leicht zugänglich machen mit .top und .Left die Objekte mit (hier pos1 und pos2) ...Jetzt hat das Linien-Tag zwei unterschiedliche Koordinaten, um eine Linie zwischen zwei Punkten zu ziehen.
Tipp: Fügen Sie nach Bedarf Ereignis-Listener zu Divs hinzu
Tipp: Stellen Sie sicher, dass Sie zuerst die jQuery-Bibliothek importieren, bevor Sie etwas in das Skript-Tag schreiben
Nach dem Hinzufügen von Koordinaten über JQuery ... sieht es ungefähr so aus
Das folgende Snippet dient nur zu Demonstrationszwecken. Befolgen Sie die obigen Schritte, um die richtige Lösung zu erhalten
quelle
Ich hatte auch die gleiche Anforderung vor ein paar Tagen
Ich habe ein SVG mit voller Breite und Höhe verwendet und es unter all meinen Divs hinzugefügt und Linien dynamisch zu diesem SVG hinzugefügt .
Überprüfen Sie, wie ich es hier mit svg gemacht habe
HTML
https://jsfiddle.net/kgfamo4b/
quelle
VisJS unterstützt dies mit seinem Arrows-Beispiel , das ziehbare Elemente unterstützt.
Mit dem Beispiel für Interaktionsereignisse werden auch bearbeitbare Verbindungen unterstützt .
quelle
GoJS unterstützt dies mit seinem Beispiel für ein Zustandsdiagramm , das das Ziehen und Ablegen von Elementen sowie das Bearbeiten von Verbindungen unterstützt.
quelle
Vor kurzem habe ich versucht, eine einfache Web-App zu entwickeln, die Drag & Drop-Komponenten verwendet und durch Linien verbunden ist. Ich bin auf diese zwei einfachen und erstaunlichen Javascript-Bibliotheken gestoßen:
quelle
Raphaël unterstützt dies mit seinem Graffle-Beispiel .
quelle
D3 hat Hunderte von Beispielen , von denen einige für diese Frage geeignet sind.
Beispiele ohne Drag & Drop, die behoben sind:
Beispiele ohne Drag & Drop, die interaktiv sind:
Beispiele für das Ziehen und Ablegen:
quelle
mxGraph - von draw.io verwendet - unterstützt diesen Anwendungsfall mit seinem Grapheditor-Beispiel . Dokumentation. Beispiele.
quelle
Cytoscape unterstützt dies mit seinem Architekturbeispiel, das das Ziehen von Elementen unterstützt.
Zum Erstellen von Verbindungen gibt es die Edgehandles- Erweiterung. Das Bearbeiten vorhandener Verbindungen wird noch nicht unterstützt. Frage.
Zum Bearbeiten von Verbindungsformen gibt es die Kantenbearbeitungserweiterung . Demo.
Die Edit-Editation- Erweiterung scheint vielversprechend, es gibt jedoch noch keine Demo.
quelle
js-graph.it unterstützt diesen Anwendungsfall, wie aus der Anleitung für die ersten Schritte hervorgeht , und unterstützt das Ziehen von Elementen ohne Verbindungsüberlappungen. Scheint nicht das Bearbeiten / Erstellen von Verbindungen zu unterstützen. Scheint nicht mehr gepflegt zu sein.
quelle
JointJS / Rappid unterstützt diesen Anwendungsfall mit seinem Kitchensink-Beispiel, das das Ziehen und Ablegen von Elementen sowie das Neupositionieren von Verbindungen unterstützt. Es hat viele Beispiele.
quelle