Au cours de jouer avec SVG pour la première fois (en utilisant la bibliothèque Raphael), je l'ai rencontré un des éléments dynamiques de positionnement de problème sur la toile de telle sorte qu'ils sont complètement contenus dans La toile. Ce que j'essaie de faire est de positionner au hasard n mots/phrases courtes.Positionnement SVG Eléments
Puisque le texte est variable, sa position doit être variable, si bien que ce que je fais est:
- Dans un premier temps la création du texte au point
0,0
sans opacité. - Vérification de la largeur de l'élément de texte établi en utilisant
text.getBBox().width
. - Définir une nouvelle coordonnée
x
commeMath.random() * (canvas_width - (text_width/2) - pad)
. - Modification de la coordonnée
x
du texte à la nouvelle valeur définie (text.attr('x', x)
). - Réglage de l'attribut d'opacité du texte à 1.
je serai le premier à admettre que mon sens des mathématiques est limité, mais cela semble assez simple. D'une manière ou d'une autre, je finis toujours avec du texte qui coule au-delà du bord droit de ma toile. Pour la simplicité ci-dessus, j'ai supprimé le bit qui définit également une valeur minimale de x
en l'ajoutant au résultat Math.random()
. Il est là, cependant, et je vois le même problème sur le bord d'attaque de la toile. Ma compréhension (telle quelle), est que les bits Math.random()
généreraient un nombre entre 0 et 1 qui pourrait ensuite être multiplié par un certain nombre (dans mon cas, la largeur du canevas - la moitié de la largeur du texte - certains padding arbitraire) pour obtenir la limite extérieure. Je divise la largeur du texte en deux parce que sa position sur la grille est placée en son centre.
J'espère que je viens de les yeux fixés sur ce trop long, mais est mon maths que rouillé ou je comprends mal quelque chose sur le comportement de Math.random()
, SVG, texte ou toute autre chose qui est sous le capot de cette solution ?
Désolé - Je pensais que j'avais une solution donc j'ai supprimé/supprimé, mais j'ai ensuite réalisé que les mathématiques ont fonctionné à ce que vous aviez avant. Je ne sais pas ce que Raphael fait sous les couvertures, donc je ne peux pas vraiment t'aider. –
Pas de problème. Vous avez peut-être été sur la bonne voie, cependant. En regardant de plus près comment 'Math.random()' a opéré et la division par 2 peut avoir été le coupable après tout. Suivra si cela fonctionne pour l'être. –