Tengo una tabla html y quiero dibujar una flecha de una celda a otra. Por ejemplo así:
¿Como se puede hacer esto?
HTML de ejemplo:
<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>
Si cambia el tamaño del navegador, la flecha debe permanecer en la (nueva) posición de inicio / finalización.
javascript
html
svg
guettli
fuente
fuente
Respuestas:
Con un poco de JavasSript y CSS puedes lograr esto sin canvas o SVG. Aquí hay un ejemplo:
fuente
ctrl -
(disminuir tamaño) la flecha pierde la posición final.Puede usar mi solución aún no completar la flecha de dibujo, dejar crear un lienzo y dibujar una línea desde dos puntos, en función del cálculo del punto inicial y final.
fuente
Solución Javascript:
fuente
Así es como lo haría: el elemento svg usa el tamaño de la tabla para el valor de viewBox. Está calculando el tamaño y la posición de las celdas que necesita correlacionar y usa esta posición para dibujar la línea. Se utiliza un marcador para la punta de la flecha.
Por favor, cambie el tamaño de la ventana:
ACTUALIZAR:
Como alguien comentó que al cambiar el tamaño de la flecha está perdiendo su posición, estoy agregando un gif:
fuente
ctrl +
(despuésctrl -
) imgur.com/8xbEAK2 Iuse Chromium 78.0.3904.70Puede usar un elemento SVG y estilos CSS para una posición absoluta superponiendo su tabla. Y obtenga el punto de inicio y finalización mediante JavaScript DOM API como
getBoundingClientRect()
Aquí hay una demostración. (Hecho con Angular, pero puedes usarlo en todas partes. Ejemplo de JavaScript puro, ver más abajo).
Puede cambiar el inicio y el final de forma dinámica. Solo tiene que volver a invocar el método para obtener las posiciones. Tenga en cuenta que uso el botón izquierdo, superior, derecho para colocar la flecha en el borde del elemento. Puede calcular el punto central o el borde comparando ambas posiciones.
Y tienes que colocar el svg sobre la mesa. Puede hacer esto estableciendo css
position: absolute; left: 0; top: 0
. Pero tenga en cuenta que su padre también debe tener elposition
atributo. por ejposition: relative
.Actualización: Aquí hay una demostración de JavaScript pura. Haga clic a la izquierda para ver todos los archivos y seleccione index.js para ver las cosas de JS. (como en VS Code).
Código completo:
Simplemente copie el código anterior en un nuevo archivo html vacío y ejecútelo en su navegador.
Por cierto. También puedes hacer esto con un lienzo. (alternativa para svg)
fuente
Necesitas poner la tabla en un div y darle una propiedad, posición: relativa Luego, escribe HTML para la flecha (usa una imagen si quieres) y dale una propiedad de absoluto y luego dale estilo como quieras usando, arriba, izquierda derecha..
Lea más sobre las propiedades de posición aquí https://www.w3schools.com/css/css_positioning.asp
fuente