Como posso desenhar uma linha entre dois ou mais elementos para conectá-los? Qualquer combinação de HTML / CSS / JavaScript / SVG / Canvas é adequada.
Se sua resposta apoiar algum destes, então mencione:
- elementos arrastáveis
- conexões arrastáveis / editáveis
- evitação de sobreposição de elemento
Esta questão foi atualizada para consolidar as inúmeras variações dela.
javascript
html
connection
line
jquery-ui-draggable
Bakhtiyor
fonte
fonte
Juntar linhas com svgs valeu a pena para mim, e funcionou perfeitamente ... primeiro de tudo, Scalable Vector Graphics (SVG) é um formato de imagem vetorial baseado em XML para gráficos bidimensionais com suporte para interatividade e animação. As imagens SVG e seus comportamentos são definidos em arquivos de texto XML. você pode criar um svg em HTML usando
<svg>
tag. Adobe Illustrator é um dos melhores softwares usados para criar um svgs complexo usando caminhos.Procedimento para unir dois divs usando uma linha:
crie dois divs e dê a eles qualquer posição que você precisar
(para fins de explicação, estou fazendo alguns estilos embutidos, mas é sempre bom fazer um arquivo css separado para estilos)
<svg><line id="line1"/></svg>
A etiqueta de linha nos permite desenhar uma linha entre dois pontos especificados (x1, y1) e (x2, y2). (para uma referência, visite w3schools.) não os especificamos ainda. porque usaremos o jQuery para editar os atributos (x1, y1, x2, y2) da tag de linha.
na
<script>
tag escreverUsei seletores para selecionar os dois divs e linha ...
O
position()
método jQuery nos permite obter a posição atual de um elemento. Para obter mais informações, visite https://api.jquery.com/position/ (você também pode usar ooffset()
método)Agora, como obtivemos todas as posições de que precisamos, podemos traçar a linha da seguinte forma ...
O
.attr()
método jQuery é usado para alterar os atributos do elemento selecionado.Tudo o que fizemos na linha acima foi mudamos os atributos da linha de
para
como
position()
retorna dois valores, um 'left' e outro 'top', podemos acessá-los facilmente usando .top e .left usando os objetos (aqui pos1 e pos2) ...Agora a etiqueta de linha tem duas coordenadas distintas para traçar uma linha entre dois pontos.
Dica: adicione ouvintes de eventos conforme necessário para divs
Dica: certifique-se de importar a biblioteca jQuery antes de escrever qualquer coisa na tag de script
Depois de adicionar as coordenadas através do JQuery ... Será algo parecido com isto
O snippet a seguir é apenas para fins de demonstração, siga as etapas acima para obter a solução correta
fonte
Eu também tive a mesma exigência alguns dias atrás
Eu usei um SVG de largura e altura total e o adicionei abaixo de todos os meus divs e adicionei linhas a esses SVG dinamicamente.
Veja como fiz aqui usando svg
HTML
https://jsfiddle.net/kgfamo4b/
fonte
VisJS suporta isso com seu exemplo Arrows , que suporta elementos arrastáveis.
Ele também oferece suporte a conexões editáveis, com seu exemplo de eventos de interação .
fonte
GoJS suporta isso, com seu exemplo de gráfico de estado , que suporta arrastar e soltar de elementos e editar conexões.
fonte
Recentemente, tentei desenvolver um aplicativo da web simples que usa componentes de arrastar e soltar e tem linhas conectando-os. Encontrei duas bibliotecas javascript simples e incríveis:
fonte
Raphaël apóia isso, com seu exemplo Graffle .
fonte
D3 tem centenas de exemplos , alguns dos quais adequados para esta questão.
Exemplos sem arrastar e soltar, que são fixos:
Exemplos sem arrastar e soltar, que são interativos:
Exemplos de arrastar e soltar:
fonte
mxGraph - usado por draw.io - suporta este caso de uso, com seu exemplo Grapheditor . Documentação. Exemplos.
fonte
O Cytoscape suporta isso com seu exemplo de arquitetura, que suporta arrastar elementos.
Para criar conexões, existe a extensão edgehandles . Ainda não suporta a edição de conexões existentes. Questão.
Para editar formas de conexão, existe a extensão de edição de arestas . Demo.
A extensão de edição e edição parece promissora, no entanto, ainda não há uma demonstração.
fonte
js-graph.it suporta este caso de uso, conforme visto em seu guia de introdução , suportando arrastar elementos sem sobreposições de conexão. Não parece que ele suporta edição / criação de conexões. Não parece mais ser mantido.
fonte
JointJS / Rappid suporta este caso de uso com seu exemplo Kitchensink que suporta arrastar e soltar elementos e reposicionar conexões. Tem muitos exemplos.
fonte