11489 sujets

JavaScript, DOM et API Web HTML5

Bonsoir à tous,

Je dois créer une carte qui au clic de certaines régions laisse apparaître une div avec la possibilité de cliquez sur différents liens dans cette div afin de diriger le visiteur vers la bonne page.

J'essaye depuis plusieurs semaines de trouver un code javascript qui va bien.
Pour le moment j'ai réussi à afficher et cacher mes div lorsque je clique alternativement sur l'une ou l'autre des régions.

Le petit détail qui me manque c'est de pouvoir cacher ma div lorsque je re-clique sur la même zone.
Exemple :
- je clique sur la région aquitaine la div correspondant à l'aquitaine s'affiche.
- je re-clique sur la région aquitaine, la div se cache.

Si quelqu'un pouvait m'aider il me serait d'un grand secours.
Merci d'avance.

Mon code html :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Image mappée</title>
<script type="text/javascript">
//Mon JavaScript
</script>

</head>

<body>
<div id="pic" style="height: auto; width: auto; background-image: url('images/map.png'); background-repeat: no-repeat; position: relative;margin-left: 100px;">
	<img id="hovered" src="images/transparent.png" usemap="#Map"/>
	<map name="Map">
		<area id="01" onmouseover="swapPic(this,1)" onclick="affichage('1')" shape="poly" coords="121,264,130,269,136,275,148,269,149,262,159,256,160,250,166,247,168,253,173,253,181,255,184,270,188,278,188,284,181,294,177,298,174,302,170,310,172,317,163,320,146,326,134,327,133,341,138,350,139,359,131,367,127,379,118,379,111,374,96,368,92,367,89,360,82,357,86,351,91,340,99,299,105,296,103,291,98,290,104,281,104,265,104,256,119,263" href="#">
        

 
      	<area onmouseover="swapPic(this,2)" onclick="affichage('2')" shape="poly" coords="120,262,113,253,105,248,106,239,110,230,106,224,109,216,115,216,122,217,127,214,123,202,119,191,118,186,125,185,130,182,138,183,146,182,154,184,158,190,164,192,172,195,173,203,174,208,181,212,181,217,178,220,170,225,171,232,173,237,170,241,165,246,160,249,160,257,149,262,149,269,136,274,126,267,119,261" href="#">

	</map>
<div id="div1" style="top: 305px; left: 120px;">
   <p>Choisissez une activité<br />
   <a href="#">Frais</a><br />
   <a href="#">Sec</a></p>
</div>
<div id="div2" style="top: 230px; left: 120px;">
   <p>Choisissez une activité<br />
   <a href="#">Frais</a><br />
   <a href="#">Sec</a></p>
</div>
</div>

</body>
</html>


Mon JavaScript :

//SURVOL ZONES REGIONS
	//Préchargement des images
		var myareas=new Array();
		myareas[0]=new Image()
		myareas[0].src="images/transparent.png"
		myareas[1]=new Image()
		myareas[1].src="images/01.png"
		myareas[2]=new Image()
		myareas[2].src="images/02.png"
		myareas['bg']=new Image()
		myareas['bg'].src="images/map.png"
	//Fin préchargement des images

	//Fonction affichage au survol
		function swapPic(zone,nr){
			var pic=document.getElementById('hovered')
			pic.src=myareas[nr].src
			zone.onmouseout=function(){pic.src=myareas['bg'].src}
		}
	//Fin fonction affichage au survol


 //Fonction qui cache les div
		function hideAll(){  
   			var i=1;  
   			while (document.getElementById("div" + i)){  
      		document.getElementById("div" + i).style.display = "none";  
      		i++;  
   			}  
		}
//Fonction qui affiche les div
		function affichage(divId){
   			hideAll();
   				if (document.getElementById("div" + divId)){ 
      			document.getElementById("div" + divId).style.display = "";
      			document.getElementById("div" + divId).style.visibility = "visible";
	  			//document.getElementById("div" + divId).style.cssText='left: 10px; top: 10px;';
	  			//document.getElementById("div" + divId).style.left= posx + "px";
	  			//document.getElementById("div" + divId).style.top= posy + "px";
   				}
   				else {  
      				document.getElementById("div" + divId).style.visibility="hidden";
   				}
   				
		}



Mon CSS :

#div1, #div2{
	position: absolute;
	z-index: 1;
	color: #000;
	background-color: #fff;
	text-align: center;
	font-family: verdana;
	font-size: 10px;
	padding: 15px 0px;
  	visibility: hidden;
  	width: 135px;
  	height: 43px;
  	background: url("images/tooltip.png") no-repeat;
}
Veux tu que plusieurs div puissent être visibles en même temps ?
Si oui:
function showHide(divId){
	if(document.getElementById(divId).style.display=='block')
	 	 document.getElementById(divId).style.display='none';
	else
	 	 document.getElementById(divId).style.display='block';
}


Sinon, il vaut mieux définir deux classes "bulle" et "visible" en css:
.bulle {
	/* propriété de ta div */
	display:none;
}

.visible {display:block;}


Tu nomme tes div comme ça:
<div id="div1" class="bulle" style="top: 305px; left: 120px;">
	<p>Choisissez une activité<br />
	<a href="#">Frais</a><br />
	<a href="#">Sec</a></p>
</div>
<div id="div2" class="bulle" style="top: 230px; left: 120px;">
	<p>Choisissez une activité<br />
	<a href="#">Frais</a><br />
	<a href="#">Sec</a></p>
</div>


Et faire ceci en js:
function showHide(divId) {
	if(document.getElementById(divId).className.match(/visible/) var false;
	else var show=true
	while(document.getElementsByClassName('bulle visible')[0]) {
		document.getElementsByClassName('bulle visible')[0].className='bulle';
	}
	if(show) document.getElementById(divId).className='bulle visible';
}

Modifié par juliendargelos (12 Mar 2014 - 14:38)
Twenten a écrit :
Bonsoir à tous,

Je dois créer une carte qui au clic de certaines régions laisse apparaître une div avec la possibilité de cliquez sur différents liens dans cette div afin de diriger le visiteur vers la bonne page.

J'essaye depuis plusieurs semaines de trouver un code javascript qui va bien.
Pour le moment j'ai réussi à afficher et cacher mes div lorsque je clique alternativement sur l'une ou l'autre des régions.

Le petit détail qui me manque c'est de pouvoir cacher ma div lorsque je re-clique sur la même zone.
Exemple :
- je clique sur la région aquitaine la div correspondant à l'aquitaine s'affiche.
- je re-clique sur la région aquitaine, la div se cache.

Si quelqu'un pouvait m'aider il me serait d'un grand secours.
Merci d'avance.

Mon code html :
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;title&gt;Image mappée&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//Mon JavaScript
&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;
&lt;div id=&quot;pic&quot; style=&quot;height: auto; width: auto; background-image: url('images/map.png'); background-repeat: no-repeat; position: relative;margin-left: 100px;&quot;&gt;
	&lt;img id=&quot;hovered&quot; src=&quot;images/transparent.png&quot; usemap=&quot;#Map&quot;/&gt;
	&lt;map name=&quot;Map&quot;&gt;
		&lt;area id=&quot;01&quot; onmouseover=&quot;swapPic(this,1)&quot; onclick=&quot;affichage('1')&quot; shape=&quot;poly&quot; coords=&quot;121,264,130,269,136,275,148,269,149,262,159,256,160,250,166,247,168,253,173,253,181,255,184,270,188,278,188,284,181,294,177,298,174,302,170,310,172,317,163,320,146,326,134,327,133,341,138,350,139,359,131,367,127,379,118,379,111,374,96,368,92,367,89,360,82,357,86,351,91,340,99,299,105,296,103,291,98,290,104,281,104,265,104,256,119,263&quot; href=&quot;#&quot;&gt;
        

 
      	&lt;area onmouseover=&quot;swapPic(this,2)&quot; onclick=&quot;affichage('2')&quot; shape=&quot;poly&quot; coords=&quot;120,262,113,253,105,248,106,239,110,230,106,224,109,216,115,216,122,217,127,214,123,202,119,191,118,186,125,185,130,182,138,183,146,182,154,184,158,190,164,192,172,195,173,203,174,208,181,212,181,217,178,220,170,225,171,232,173,237,170,241,165,246,160,249,160,257,149,262,149,269,136,274,126,267,119,261&quot; href=&quot;#&quot;&gt;

	&lt;/map&gt;
&lt;div id=&quot;div1&quot; style=&quot;top: 305px; left: 120px;&quot;&gt;
   &lt;p&gt;Choisissez une activité&lt;br /&gt;
   &lt;a href=&quot;#&quot;&gt;Frais&lt;/a&gt;&lt;br /&gt;
   &lt;a href=&quot;#&quot;&gt;Sec&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;div2&quot; style=&quot;top: 230px; left: 120px;&quot;&gt;
   &lt;p&gt;Choisissez une activité&lt;br /&gt;
   &lt;a href=&quot;#&quot;&gt;Frais&lt;/a&gt;&lt;br /&gt;
   &lt;a href=&quot;#&quot;&gt;Sec&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;


Mon JavaScript :

//SURVOL ZONES REGIONS
	//Préchargement des images
		var myareas=new Array();
		myareas[0]=new Image()
		myareas[0].src=&quot;images/transparent.png&quot;
		myareas[1]=new Image()
		myareas[1].src=&quot;images/01.png&quot;
		myareas[2]=new Image()
		myareas[2].src=&quot;images/02.png&quot;
		myareas['bg']=new Image()
		myareas['bg'].src=&quot;images/map.png&quot;
	//Fin préchargement des images

	//Fonction affichage au survol
		function swapPic(zone,nr){
			var pic=document.getElementById('hovered')
			pic.src=myareas[nr].src
			zone.onmouseout=function(){pic.src=myareas['bg'].src}
		}
	//Fin fonction affichage au survol


 //Fonction qui cache les div
		function hideAll(){  
   			var i=1;  
   			while (document.getElementById(&quot;div&quot; + i)){  
      		document.getElementById(&quot;div&quot; + i).style.display = &quot;none&quot;;  
      		i++;  
   			}  
		}
//Fonction qui affiche les div
		function affichage(divId){
   			hideAll();
   				if (document.getElementById(&quot;div&quot; + divId)){ 
      			document.getElementById(&quot;div&quot; + divId).style.display = &quot;&quot;;
      			document.getElementById(&quot;div&quot; + divId).style.visibility = &quot;visible&quot;;
	  			//document.getElementById(&quot;div&quot; + divId).style.cssText='left: 10px; top: 10px;';
	  			//document.getElementById(&quot;div&quot; + divId).style.left= posx + &quot;px&quot;;
	  			//document.getElementById(&quot;div&quot; + divId).style.top= posy + &quot;px&quot;;
   				}
   				else {  
      				document.getElementById(&quot;div&quot; + divId).style.visibility=&quot;hidden&quot;;
   				}
   				
		}



Mon CSS :

#div1, #div2{
	position: absolute;
	z-index: 1;
	color: #000;
	background-color: #fff;
	text-align: center;
	font-family: verdana;
	font-size: 10px;
	padding: 15px 0px;
  	visibility: hidden;
  	width: 135px;
  	height: 43px;
  	background: url(&quot;images/tooltip.png&quot;) no-repeat;
}