J'ai un tableau html et je veux dessiner une flèche d'une cellule à une autre cellule. Par exemple, comme ceci:
Comment cela pourrait-il être fait?
Exemple 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>
Si vous redimensionnez le navigateur, la flèche doit rester sur la (nouvelle) position de début / fin.
javascript
html
svg
guettli
la source
la source
Réponses:
Avec un peu de JavasSript et CSS, vous pouvez y parvenir sans canvas ni SVG. Voici un exemple:
la source
ctrl -
(diminuer la taille) la flèche perd la position de fin.Vous pouvez utiliser ma solution pas encore terminé dessiner une flèche, laisser créer un canevas et dessiner une ligne à partir de deux points, en fonction du calcul du point de départ et du point de fin.
la source
Solution Javascript:
la source
Voici comment je le ferais: l'élément svg utilise la taille de la table pour la valeur viewBox. Vous calculez la taille et la position des cellules dont vous avez besoin pour corréler et utilisez cette position pour tracer la ligne. Un marqueur est utilisé pour le bout de la flèche.
Veuillez redimensionner la fenêtre:
MISE À JOUR:
Puisque quelqu'un a commenté que lors du redimensionnement, la flèche perd sa position, j'ajoute un gif:
la source
ctrl +
(aprèsctrl -
) imgur.com/8xbEAK2 Iuse Chromium 78.0.3904.70Vous pouvez utiliser un élément SVG et des styles CSS pour une position absolue superposant votre table. Et obtenez le point de départ et de fin par l'API DOM JavaScript comme
getBoundingClientRect()
Voici une démo. (Fabriqué avec Angular, mais vous pouvez l'utiliser partout. Exemple JavaScript pur voir ci-dessous.)
Vous pouvez modifier dynamiquement le début et la fin. Il vous suffit de réinvoquer la méthode pour obtenir les positions. Notez que j'utilise le bouton gauche, haut, droite, pour placer la flèche sur le bord de l'élément. Vous pouvez calculer le point central ou le bord en comparant les deux positions.
Et vous devez placer le svg sur la table. Vous pouvez le faire en définissant css
position: absolute; left: 0; top: 0
. Mais notez que votre parent devrait également avoir l'position
attribut. par exempleposition: relative
.Mise à jour: voici une pure démo JavaScript. Cliquez sur la gauche pour afficher tous les fichiers et sélectionnez index.js pour afficher les éléments JS. (comme dans VS Code).
Code complet:
Copiez simplement le code ci-dessus dans un nouveau fichier html vide et exécutez-le dans votre navigateur.
Btw. Vous pouvez également le faire avec une toile. (alternative pour svg)
la source
Vous devez mettre le tableau dans un div et donner une propriété, position: relative Ensuite, écrivez du HTML pour la flèche (utilisez une image si vous le souhaitez) et donnez-lui une propriété d'absolu puis stylisez-le comme vous le souhaitez en utilisant, en haut, gauche droite..
En savoir plus sur les propriétés de position ici https://www.w3schools.com/css/css_positioning.asp
la source