Positionnement multiple, taille aléatoire, éléments absolument positionnés afin qu'ils ne se chevauchent pas

Ok, je dois être en mesure de positionner un tas de mots de position aléatoire parfaitement positionnés sur une page, mais je ne veux pas que tous les éléments se chevauchent.

L'objectif final est d'avoir un nuage de mots fluide qui répond à l'interaction de l'utilisateur (rappelez-vous le Google Balls Doodle ?). J'aimerais vraiment construire cela à partir de zéro pour développer ma compréhension de ce type de développement. Toute aide dans ce département serait également appréciée 🙂

Je ne suis pas sûr si vous voulez également placer les mots aléatoirement dans un conteneur, mais j'ai écrit un violon qui fait exactement cela. Vous pouvez modifier le code pour positionner un mot juste après l'autre si vous le souhaitez. Je pense que la partie clé est la méthode pour vérifier s'il y a une collision.

Voir http://jsfiddle.net/fZtdt/13/

EDIT: Notez qu'il s'agit d'un code très simple et non optimisé. Si, par exemple, vous ajoutez à plusieurs mots, il est probable que le script ne pourra pas correspondre à tous les mots dans le conteneur et entrer dans une boucle sans fin.

J'ai demandé au script de Jules d'ajouter cette amélioration: la recherche d'une région sans chevauchement est délimitée (sinon, le script d'origine sera en boucle) et la meilleure région (celle avec le plus petit chevauchement) est sélectionnée.

Voir http://jsfiddle.net/Vnyvc/21/

Jouez avec la variable maxSearchIterations et / ou la taille de la région entière, cela fait vraiment une différence.