Comment puis-je dessiner une ligne entre deux ou plusieurs éléments pour les relier? Toute combinaison de HTML / CSS / JavaScript / SVG / Canvas convient.
Si votre réponse prend en charge l'un de ces éléments, mentionnez-le:
- éléments déplaçables
- connexions déplaçables / modifiables
- évitement du chevauchement des éléments
Cette question a été mise à jour pour en consolider les nombreuses variantes .
la source
Joindre des lignes avec des svgs valait le coup pour moi, et cela a parfaitement fonctionné ... Tout d'abord, Scalable Vector Graphics (SVG) est un format d'image vectorielle basé sur XML pour les graphiques en deux dimensions avec prise en charge de l'interactivité et de l'animation. Les images SVG et leurs comportements sont définis dans des fichiers texte XML. vous pouvez créer un svg en HTML en utilisant une
<svg>
balise. Adobe Illustrator est l'un des meilleurs logiciels utilisés pour créer des svgs complexes à l'aide de chemins.Procédure pour joindre deux div à l'aide d'une ligne:
créez deux divs et donnez-leur la position dont vous avez besoin
(pour des raisons d'explication, je fais du style en ligne mais il est toujours bon de créer un fichier css séparé pour le style)
<svg><line id="line1"/></svg>
La balise de ligne nous permet de tracer une ligne entre deux points spécifiés (x1, y1) et (x2, y2). (pour une visite de référence w3schools.) nous ne les avons pas encore spécifiés. car nous utiliserons jQuery pour éditer les attributs (x1, y1, x2, y2) de la balise de ligne.
en
<script>
écriture de baliseJ'ai utilisé des sélecteurs pour sélectionner les deux divs et la ligne ...
La
position()
méthode jQuery nous permet d'obtenir la position actuelle d'un élément. Pour plus d'informations, visitez https://api.jquery.com/position/ (vous pouvez également utiliser laoffset()
méthode)Maintenant que nous avons obtenu toutes les positions dont nous avons besoin, nous pouvons tracer la ligne comme suit ...
jQuery
.attr()
méthode est utilisée pour modifier les attributs de l'élément sélectionné.Tout ce que nous avons fait dans la ligne ci-dessus, c'est que nous avons changé les attributs de la ligne de
à
comme
position()
renvoie deux valeurs, une 'left' et l'autre 'top', on peut facilement y accéder en utilisant .top et .left en utilisant les objets (ici pos1 et pos2) ...L'étiquette de ligne a maintenant deux coordonnées distinctes pour tracer une ligne entre deux points.
Astuce: ajoutez des écouteurs d'événements selon vos besoins
Astuce: assurez-vous d'importer la bibliothèque jQuery avant d'écrire quoi que ce soit dans la balise de script
Après avoir ajouté des coordonnées via JQuery ... Cela ressemblera à quelque chose comme ça
L'extrait suivant est uniquement à des fins de démonstration, veuillez suivre les étapes ci-dessus pour obtenir la bonne solution
la source
J'ai également eu la même exigence il y a quelques jours
J'ai utilisé un svg pleine largeur et hauteur et l'ai ajouté sous toutes mes divs et ajouté des lignes à ces svg dynamiquement.
Découvrez comment je l'ai fait ici en utilisant svg
HTML
https://jsfiddle.net/kgfamo4b/
la source
VisJS prend en charge cela avec son exemple Arrows , qui prend en charge les éléments déplaçables.
Il prend également en charge les connexions modifiables, avec son exemple d'événements d'interaction .
la source
GoJS prend en charge cela, avec son exemple State Chart , qui prend en charge le glisser-déposer d'éléments et l'édition des connexions.
la source
Récemment, j'ai essayé de développer une application Web simple qui utilise des composants glisser-déposer et des lignes les reliant. Je suis tombé sur ces deux bibliothèques javascript simples et étonnantes:
la source
Raphaël le soutient, avec son exemple Graffle .
la source
D3 a des centaines d'exemples , dont certains conviennent à cette question.
Exemples sans glisser-déposer, qui sont corrigés:
Exemples sans glisser-déposer, interactifs:
Exemples avec glisser-déposer:
la source
mxGraph - utilisé par draw.io - prend en charge ce cas d'utilisation, avec son exemple Grapheditor . Documentation. Exemples.
la source
Cytoscape prend en charge cela avec son exemple d'architecture qui prend en charge le glissement d'éléments.
Pour créer des connexions, il existe l' extension des poignées de bord . Il ne prend pas encore en charge la modification des connexions existantes. Question.
Pour modifier les formes de connexion, il existe l' extension d' édition des bords . Démo.
L' extension edit-editation semble prometteuse, cependant il n'y a pas encore de démo.
la source
js-graph.it prend en charge ce cas d'utilisation, comme le montre son guide de démarrage , prenant en charge le glissement d'éléments sans chevauchement de connexion. Il ne semble pas qu'il prenne en charge l'édition / la création de connexions. Cela ne semble plus être maintenu.
la source
JointJS / Rappid prend en charge ce cas d'utilisation avec son exemple Kitchensink qui prend en charge le glisser-déposer d'éléments et le repositionnement des connexions. Il a de nombreux exemples.
la source