¿Cómo puedo trazar una línea entre dos o más elementos para conectarlos? Cualquier combinación de HTML / CSS / JavaScript / SVG / Canvas está bien.
Si su respuesta es compatible con alguno de estos, menciónelo:
- elementos arrastrables
- conexiones que se pueden arrastrar / editar
- evitación de superposición de elementos
Esta pregunta se ha actualizado para consolidar las numerosas variaciones de la misma.
fuente
Unir líneas con svgs valió la pena para mí, y funcionó perfectamente ... En primer lugar, Scalable Vector Graphics (SVG) es un formato de imagen vectorial basado en XML para gráficos bidimensionales con soporte para interactividad y animación. Las imágenes SVG y sus comportamientos se definen en archivos de texto XML. puede crear un svg en HTML usando una
<svg>
etiqueta. Adobe Illustrator es uno de los mejores programas utilizados para crear svgs complejos utilizando rutas.Procedimiento para unir dos divs usando una línea:
crea dos divs y dales la posición que necesites
(en aras de la explicación, estoy haciendo un estilo en línea, pero siempre es bueno crear un archivo css separado para el estilo)
<svg><line id="line1"/></svg>
La etiqueta de línea nos permite dibujar una línea entre dos puntos especificados (x1, y1) y (x2, y2). (para una referencia, visite w3schools). Aún no los hemos especificado. porque usaremos jQuery para editar los atributos (x1, y1, x2, y2) de la etiqueta de línea.
en
<script>
escritura de etiquetaUsé selectores para seleccionar los dos divs y la línea ...
El
position()
método jQuery nos permite obtener la posición actual de un elemento. Para obtener más información, visite https://api.jquery.com/position/ (también puede usar eloffset()
método)Ahora que hemos obtenido todas las posiciones que necesitamos, podemos trazar la línea de la siguiente manera ...
El
.attr()
método jQuery se utiliza para cambiar los atributos del elemento seleccionado.Todo lo que hicimos en la línea anterior es cambiar los atributos de la línea de
a
como
position()
devuelve dos valores, uno 'left' y otro 'top', podemos acceder fácilmente a ellos usando .top y .left usando los objetos (aquí pos1 y pos2) ...Ahora la etiqueta de línea tiene dos coordenadas distintas para trazar una línea entre dos puntos.
Sugerencia: agregue detectores de eventos según necesite para divs
Consejo: asegúrese de importar la biblioteca jQuery primero antes de escribir cualquier cosa en la etiqueta del script
Después de agregar coordenadas a través de JQuery ... se verá algo así
El siguiente fragmento es solo para fines de demostración, siga los pasos anteriores para obtener la solución correcta
fuente
También tuve el mismo requisito hace unos días.
Usé un svg de ancho y alto completo y lo agregué debajo de todos mis divs y agregué líneas a estos svg dinámicamente.
Mira cómo lo hice aquí usando svg
HTML
https://jsfiddle.net/kgfamo4b/
fuente
VisJS admite esto con su ejemplo de Flechas , que admite elementos arrastrables.
También admite conexiones editables, con su ejemplo de Eventos de interacción .
fuente
GoJS admite esto, con su ejemplo de gráfico de estado , que admite arrastrar y soltar elementos y editar conexiones.
fuente
Recientemente, intenté desarrollar una aplicación web simple que usa componentes de arrastrar y soltar y tiene líneas que los conectan. Me encontré con estas dos bibliotecas de JavaScript simples y sorprendentes:
fuente
Raphaël apoya esto, con su ejemplo de Graffle .
fuente
D3 tiene cientos de ejemplos , algunos de los cuales son adecuados para esta pregunta.
Ejemplos sin arrastrar y soltar, que son arreglados:
Ejemplos sin arrastrar y soltar, que son interactivos:
Ejemplos con arrastrar y soltar:
fuente
mxGraph , utilizado por draw.io , admite este caso de uso, con su ejemplo de Grapheditor . Documentación. Ejemplos.
fuente
Cytoscape admite esto con su ejemplo de Arquitectura que admite elementos de arrastre.
Para crear conexiones, existe la extensión de manijas de borde . Todavía no admite la edición de conexiones existentes. Pregunta.
Para editar formas de conexión, existe la extensión de edición de bordes . Manifestación.
La extensión de edición y edición parece prometedora, sin embargo, aún no hay una demostración.
fuente
js-graph.it admite este caso de uso, como se ve en su guía de introducción , que admite elementos de arrastre sin superposiciones de conexión. No parece que sea compatible con la edición / creación de conexiones. Parece que ya no se mantiene.
fuente
JointJS / Rappid admite este caso de uso con su ejemplo de Kitchensink que admite arrastrar y soltar elementos y reposicionar conexiones. Tiene muchos ejemplos.
fuente