[javascript] Bulles à cliquer

Résolu
Pomme87 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -  
Pomme87 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai appris il n'y a pas longtemps à changer la propriété display d'un bloc lorsque je clique sur une icône.

Résultat, ça fait apparaître une bulle en position absolue en dessous de mon icône lorsque je clique dessus. C'était bien le but recherché, mais le problème c'est que les bulles s'entassent par après...

Ma question c'est, comment je pourrais faire en sorte que lorsque que je clique sur la bulle elle disparaît ou lorsque je clique sur une autre icône la bulle disparaît pour laisser place à une autre ?

3 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Je poste en dessous un code similaire à celui proposé par Groarh.

La différence résidant dans le fait de stocker en variable les index des bulles, et non pas les bulles en elle-même.
J'ai quelque chose de similaire avec la modification de la couleur de texte de mes menus : quand on clique sur un menu, il se colore ; quand on clique sur un autre, il se colore à son tour mais l'anciennement coloré doit redevenir blanc.

Pour cela, tu peux utiliser des noms identiques pour toutes tes bulles, genre "bulle1, "bulle2", ... Et tu stocke le numéro de la bulle actuellement ouverte dans une variable globale :

indexBulleOuverte = 0; // Vaut 0 si aucune bulle ouverte


Ensuite on code la fonction "afficherBulle" appelée lors du clic sur une icône :

function afficherBulle (indexBulleParam) {  
   if (indexBulleOuverte != 0){  
      document.getElementById("bulle"+indexBulleOuverte).style.display = "none";  
   }  
   document.getElementById("bulle"+indexBulleParam).style.display = "";  
   indexBulleOuverte = indexBulleParam;


Et enfin la fonction de fermeture d'une bulle "seule" (sans cliquer sur une autre) :

function effacerBulle(indexBulleParam){  
   document.getElementById("bulle"+indexBulleParam).style.display = "none";  
   indexBulleOuverte = 0;  
}


Voila... je pense que cela doit fonctionner !
Donc sur tes icones tu ajoutes un "onclick="afficherBulle(indexDeLaBulleCorrespondante);"" et sur tes bulles un "onclick="effacerBulle(indexDeLaBulle);""

Et voilou !
L'avantage des index (bulle1, bulle2, etc...) c'est que c'est plus facilement gérable dans des boucles... mais moins facile à comprendre !
Question de goût :-)

Tant qu'on ne fait pas, on ne sait pas.
2
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Haha, voilà un problème intéressant :)

Alors pour faire disparaître la bulle en cliquant dessus, rien de plus simple, tu lui mets un attribut onclick, un petit this.style.display = 'none' et ça passe comme dans du beurre.

Maintenant, pour faire disparaître une bulle quand une autre apparaît, c'est une autre histoire. Y'a plusieurs façons de faire. Le plus simple, même si c'est pas forcément le plus propre, je pense que c'est de passer par une variable globale. Appelons-la bulleVisible. Donc dans ta fonction actuelle qui fait apparaître une bulle, tu fais un truc genre :
...
bulleVisible = document.getElementById('laBulle');
...

Et ensuite, il faut que cette même fonction soit capable de faire disparaître la bulle visible quand on en fait apparaître une autre.
...
bulleVisible.style.display = 'none'; 
bulleVisible = document.getElementById('laBulle');
...

Le problème c'est que la première fois, il n'y a aucune bulle visible. Il faut donc vérifier :
...
if (bulleVisible) { 
   bulleVisible.style.display = 'none'; 
} 
bulleVisible = document.getElementById('laBulle');
...

;)
1
Pomme87 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
tiptop ! dsl du retard de la réponse, mais tout marche à merveille sur mon site : les internautes devraient être contents !
0