Eu tenho uma tabela html e quero desenhar uma seta de uma célula para outra célula. Por exemplo, assim:
Como isso poderia ser feito?
Exemplo de HTML:
<html>
<body>
<table>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td id="end">9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
<tr><td id="start">0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><tr>
</body>
</html>
Se você redimensionar o navegador, a seta deve permanecer na (nova) posição inicial / final.
javascript
html
svg
guettli
fonte
fonte
Respostas:
Com um pouco de JavasSript e CSS, você pode conseguir isso sem tela ou SVG. Aqui está um exemplo:
fonte
ctrl -
(diminuir o tamanho), a seta perde a posição final.Você pode usar minha solução para não completar a seta de desenho ainda, vamos criar uma tela e desenhar uma linha a partir de dois pontos, com base no cálculo do ponto inicial e final.
fonte
Solução Javascript:
fonte
É assim que eu faria: O elemento svg usa o tamanho da tabela para o valor viewBox. Você está calculando o tamanho e a posição das células que precisa correlacionar e use essa posição para desenhar a linha. Um marcador é usado para a ponta da seta.
Redimensione a janela:
ATUALIZAR:
Como alguém comentou que no redimensionamento a seta está perdendo sua posição, estou adicionando um gif:
fonte
ctrl +
(depoisctrl -
) imgur.com/8xbEAK2 iuse Cromo 78.0.3904.70Você pode usar um elemento SVG e estilos css para posição absoluta sobrepondo sua tabela. E obtenha o ponto inicial e final da API DOM do JavaScript, como
getBoundingClientRect()
Aqui está uma demonstração. (Feito com Angular, mas você pode usá-lo em qualquer lugar. Exemplo de JavaScript puro, veja abaixo.)
Você pode alterar o início e o fim dinamicamente. Você só precisa reinvocar o método para obter as posições. Observe que eu uso o botão esquerdo, superior, direito, para colocar a seta na borda do elemento. Você pode calcular o ponto central ou a aresta comparando as duas posições.
E você tem que colocar o svg sobre a mesa. Você pode fazer isso definindo css
position: absolute; left: 0; top: 0
. Mas observe que seu pai também deve ter oposition
atributo por exemploposition: relative
.Atualização: Aqui está uma demonstração JavaScript pura. Clique à esquerda para visualizar todos os arquivos e selecione index.js para visualizar o material JS. (como no código VS).
Código completo:
Basta copiar o código acima em um novo arquivo html vazio e executá-lo no seu navegador.
Btw. Você também pode fazer isso com uma tela. (alternativa para svg)
fonte
Você precisa colocar a tabela em uma div e fornecer uma propriedade, position: relative Em seguida, escreva HTML para a seta (use uma imagem se desejar) e dê uma propriedade absoluta e, em seguida, estilize-a como desejar, top, esquerda direita..
Leia mais sobre propriedades da posição aqui https://www.w3schools.com/css/css_positioning.asp
fonte