IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tooltip contenant des liens : des multiliens


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 34
    Points
    34
    Par défaut Tooltip contenant des liens : des multiliens
    Je cherche à implémenter la fonction suivante:
    Pour les liens html je souhaite voir apparaitre un tooltip qui lui meme va contenir deux ou trois autre liens (présenté en menu vertical, mais ca c'est un détail) . Cela constitue une ergonomie multiliens.
    Je suis déjà surpris de n'avoir pas trouvé cette fonctionnalité sur le web tant elle me parrait évidente... (j'ai peut-etre mal cherché, si vous avez du code tout fait je suis aussi preneur, je déteste réinventer la poudre).
    Le code que j'ai devellopé marche à moitié . (j'avoue j'ai pris le code javascript tooltip ailleurs).
    Lorsque la souris passe sur le lien le menu apparait à peu près bien et le menu fonctionne, les liens contenus dans le menu aussi. Mais si la souris quitte la zone du lien , ca se passe parfois bien, parfois mal. (le menu-tooltip se promène ou ne disparait pas).
    Je ne suis pas expert en javascript et j'ai l'impression qu'il me manque un petit détail dans la gestion du bougé de la souris. Voici le code complet de la page test (un copié collé dans une page locale permet de voir le probleme):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    	<title>Multi Lien</title>
    	<script type="text/javascript">
    	/*<![CDATA[*/
    		////////////////////////////////////////////////////////////
    		// position of the tooltip relative to the mouse in pixel //
    		var offsetx = 0;										  //
    		var offsety =  0;										  //
    		var in_mlink = false;
    		function newelement(newid)
    		{ 
    			if(document.createElement)
    			{ 
    				var el = document.createElement('div'); 
    				el.id = newid;     
    				with(el.style)
    				{ 
    					display = 'none';
    					position = 'absolute';
    				} 
    				el.innerHTML = '&nbsp;'; 
    				document.body.appendChild(el); 
    			} 
    		} 
    		var ie5 = (document.getElementById && document.all); 
    		var ns6 = (document.getElementById && !document.all); 
    		var ua = navigator.userAgent.toLowerCase();
    		var isapple = (ua.indexOf('applewebkit') != -1 ? 1 : 0);
     
     
    		function getmouseposition(e) // thanks to Grant O. Anderson from Arizona State University
    		{
    			if(document.getElementById  )
    			{
    				var iebody=(document.compatMode && 	document.compatMode != 'BackCompat') ? 	document.documentElement : document.body;
    				pagex = (isapple == 1 ? 0 : (ie5)?iebody.scrollLeft:window.pageXOffset);
    				pagey = (isapple == 1 ? 0 : (ie5)?iebody.scrollTop:window.pageYOffset);
    				mousex = (ie5)?event.x:(ns6)?clientX = e.clientX:false;
    				mousey = (ie5)?event.y:(ns6)?clientY = e.clientY:false;
     
    				var lixlpixel_tooltip = document.getElementById('tooltip');
    				if ( !in_mlink) {
    					lixlpixel_tooltip.style.left = (mousex+pagex+offsetx) + 'px';
    					lixlpixel_tooltip.style.top = (mousey+pagey+offsety) + 'px';
       					in_mlink = true;
    				}
    				else {
     
    					if (( mousex+pagex+offsetx < lixlpixel_tooltip.style.left.replace(/px/,"")) || (mousey+pagey+offsety < lixlpixel_tooltip.style.top.replace(/px/,""))) {
    							in_mlink = false;
    					} 
    				}
    			}
    		}
     
    		function tooltip(tipdiv)
    		{
    			var tip = document.getElementById(tipdiv).innerHTML;
    			if(!document.getElementById('tooltip')) newelement('tooltip');
    			var lixlpixel_tooltip = document.getElementById('tooltip');
    			lixlpixel_tooltip.innerHTML = tip;
    			lixlpixel_tooltip.style.display = 'block';
    			document.onmousemove = getmouseposition;
    		}
     
    		function exit()
    		{
    			if(document.getElementById )
    			{
    				var iebody=(document.compatMode && 	document.compatMode != 'BackCompat') ? 	document.documentElement : document.body;
    				var lixlpixel_tooltip = document.getElementById('tooltip');
    				if (in_mlink) {
    					document.getElementById('tooltip').style.display = 'none';	
    					in_mlink = false;
    				}
    			}
    		}
    		/*]]>*/
    	</script>
     
    	<style type="text/css">
    	/*<![CDATA[*/
     
    		/* style your tooltips here */
    		#tooltip {
    			padding: 3px;
    			background: #f9f9f9;
    			border: 1px solid #eee;
    			text-align: center;
    			font-size: smaller;
    			opacity: .9;
    		}
     
    		/* style the spans with tooltips here */
    		span.tip {
    			border-bottom: 1px solid #eee;
    		}
     
    		span.tip span {
    			display: none;
    		}
     
    		a.syst {
                    color:#555555 ;
                    margin-top:10px ; /* Crée un marge de 10pixels en haut du menu */
                    display:block ;/* menu vertical*/
                    }       
    		a.syst:hover {
    				 color:#000000 ;
                     background-color:#93CDD9;
                   }                	
     
     
    		/*]]>*/
    	</style>
    </head>
    <body>
    	<div id="main">
    			<br/><br/><br/><br/><br/><br/><br/><br/><br/>
    		    Ceci est une démonstation de multi-liens <span class="tip" onmouseover="tooltip('csstips');" onmouseout="exit();"><a href="http://www.developpez.com/">Lien 1 classique</a>, le menu tool tip doit apparaite au passage de la souris...
    			<span id="csstips"><a class="syst" href="http://www.developpez.net/forums/">Mon lien 2 (forum)</a>
    				<a class="syst" href="http://general.developpez.com/cours/">Mon Lien 3 (cours)</a>
    				<a class="syst" href="http://xml.developpez.com/sources/">Mon lien 4 (source)</a></span></span>.
    			<br/><br/><br/><br/><br/><br/><br/><br/><br/>
    		    Ceci est une démonstation de multi-liens <span class="tip" onmouseover="tooltip('csstips2');" onmouseout="exit();"><a href="http://www.developpez.com/">Lien bis </a>, le menu tool tip doit apparaite au passage de la souris...
    			<span id="csstips2"><a class="syst" href="http://www.developpez.net/forums/">Mon lien bis 2 (forum)</a>
    				<a class="syst" href="http://general.developpez.com/cours/">Mon Lien bis 3 (cours)</a>
    				<a class="syst" href="http://xml.developpez.com/sources/">Mon lien bis 4 (source)</a></span></span>.
     
    		</div>
    </body>
    </html>
    Merci d'avance, je pense que cette fonctionnalité interressera d'autres personnes. (le "tooltip-menu" est une façon d'implémenter Xlink voir ici sur le forum xml la discussion "pour en finir avec xlink").
    Raphael

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Points : 34
    Points
    34
    Par défaut C'est résolu
    Voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    	<title>Multi Lien</title>
    	<script type="text/javascript">
    	/*<![CDATA[*/
    		// position of the tooltip relative to the mouse in pixel //
    		var offsetx =0;										  //
    		var offsety =20;										  //
    		var in_mlink = false;
    		function newelement(newid)
    		{ 
    			if(document.createElement)
    			{ 
    				var el = document.createElement('div'); 
    				el.id = newid;     
    				with(el.style)
    				{ 
    					display = 'none';
    					position = 'absolute';
    				} 
    				el.innerHTML = '&nbsp;'; 
    				document.body.appendChild(el); 
    			} 
    		} 
    		var ie5 = (document.getElementById && document.all); 
    		var ns6 = (document.getElementById && !document.all); 
    		var ua = navigator.userAgent.toLowerCase();
    		var isapple = (ua.indexOf('applewebkit') != -1 ? 1 : 0);
    		var tdebug="begin</br>";
    		var oldTypdiv='';
    		var x_element;
    		var y_element;
    		function getmouseposition(e) // thanks to Grant O. Anderson from Arizona State University
    		{
     
    			if(document.getElementById  )
    			{
    				var iebody=(document.compatMode && 	document.compatMode != 'BackCompat') ? 	document.documentElement : document.body;
    				pagex = (isapple == 1 ? 0 : (ie5)?iebody.scrollLeft:window.pageXOffset);
    				pagey = (isapple == 1 ? 0 : (ie5)?iebody.scrollTop:window.pageYOffset);
    				mousex = (ie5)?event.x:(ns6)?clientX = e.clientX:false;
    				mousey = (ie5)?event.y:(ns6)?clientY = e.clientY:false;
    				var elem_tooltip = document.getElementById('tooltip');
    				mx=mousex+pagex;				
    				my=mousey+pagey;
     
     
    				if ( !in_mlink) {
    //					elem_tooltip.style.left = (mousex+pagex+offsetx) + 'px';
    //					elem_tooltip.style.top = (mousey+pagey+offsety) + 'px';
     
    					elem_tooltip.style.left = (x_element+offsetx) + 'px';
    					elem_tooltip.style.top = (y_element+offsety) + 'px';
     
     
       					in_mlink = true;
    					cx=parseInt(elem_tooltip.style.left.replace(/px/,""),10)-offsetx;
    					cy=parseInt(elem_tooltip.style.top.replace(/px/,""),10)-offsety;
    					mydebug('{'+mx+','+my+','+cx+','+cy+' -'+my+'-}');
    				}
    				else {
    					cx=parseInt(elem_tooltip.style.left.replace(/px/,""),10)-offsetx;
    					cy=parseInt(elem_tooltip.style.top.replace(/px/,""),10)-offsety;
    					vx=100;
    					vy=100;
    					tol=15;
    					if (  ( cx <= mx+tol ) && ( mx-tol < cx + vx) &&  (cy <= my+tol  ) && ( my-tol < cy+vy)) { 
    //						mydebug('['+cx +'<='+mx+'<'+(cx+vx)+' && '+cy+'<='+my+'<'+(cy+vy)+' IN]');
    					}
    					else {
    						mydebug('['+cx +'<='+mx+'<'+(cx+vx)+' && '+cy+'<='+my+'<'+(cy+vy)+' OUT]');
    						pmy=my;
    						var iebody=(document.compatMode && 	document.compatMode != 'BackCompat') ? 	document.documentElement : document.body;
    					    var elem_tooltip = document.getElementById('tooltip');
    						document.getElementById('tooltip').style.display = 'none';	
    						in_mlink = false;
    						document.onmousemove = null;
    						oldTypdiv='';
    					} 
     
    				}
     
    			}
    		}
     
    		function tooltip(tipdiv)
    		{
    			if (oldTypdiv==tipdiv) { // cas ou le menu du lien est déja affiché.
    				mydebug('SAME tooltip:'+tipdiv);
    				 return;
    			} else {
    				mydebug('tooltip:'+tipdiv);
    			}
     
     
     
    			if (in_mlink) { // si déja dans lien
    						var iebody=(document.compatMode && 	document.compatMode != 'BackCompat') ? 	document.documentElement : document.body;
    					    var elem_tooltip = document.getElementById('tooltip');
    						document.getElementById('tooltip').style.display = 'none';	
    						in_mlink = false;
    			}
    			oldTypdiv=tipdiv;
    			var tip = document.getElementById(tipdiv).innerHTML;
    			if(!document.getElementById('tooltip')) newelement('tooltip');
    			var elem_tooltip = document.getElementById('tooltip');
    			var par=elem_tooltip.parentNode;
    			elem_tooltip.innerHTML = tip;
    			elem_tooltip.style.display = 'block';
    			document.onmousemove = getmouseposition;
    		}
    		function coordElement(x,y) {
    			mydebug('coor:'+x+' '+y);
    			x_element=x;
    			y_element=y;
    		}
    		function  mydebug(t)
    		{
    //				tdebug=tdebug+t+" ";
    //			    document.getElementById("LBL_pos").innerHTML = tdebug; 
    		}
    		/*]]>*/
    	</script>
     
    	<style type="text/css">
    	/*<![CDATA[*/
     
    		/* style your tooltips here */
    		#tooltip {
    			padding: 3px;
    			background: #f9f9f9;
    			border: 2px solid #000;
    			text-align: center;
    			font-size: smaller;
    //			opacity: .9;
    		}
     
    		/* style the spans with tooltips here */
    		span.tip {
    			border-bottom: 1px solid #eee;
    		}
     
    		span.tip span {
     
    			display: none;
    		}
     
    		a.syst {
                    color:#555555 ;
                    margin-top:0px ; /* Crée un marge de pixels en te chaque ligne du menu */
                    display:block ;/* menu vertical*/
                    }       
    		a.syst:hover {
    				 color:#000000 ;
                     background-color:#93CDD9;
                   }                	
     
     
    		/*]]>*/
    	</style>
    </head>
    <body>
    	<div id="main">
     
    			<br/><h3>Multiliens sur un lien classique</h3>
    		    Ceci est une démonstation de multi-liens <span class="tip" onmouseover="coordElement(this.offsetLeft,this.offsetTop);tooltip('csstips');" ><a  href="http://www.developpez.com/">Lien 1 classique</a>
    			<span id="csstips" ><a class="syst" href="http://www.developpez.net/forums/">Mon lien 2 (forum)</a>
    				<a class="syst" href="http://general.developpez.com/cours/">Mon Lien 3 (cours)</a>
    				<a class="syst" href="http://xml.developpez.com/sources/">Mon lien 4 (source)</a></span></span>, le menu tool tip doit apparaite au passage de la souris....<br/>
    				Voila une ligne en dessous pour voir ce que ca donne, lorsque le lien est au milieu d'un texte.<br/>		
    				Et ca c'est du blabla pour remplir la ligne.Et ca c'est du blabla pour remplir la ligne.<br/>
    				Et ca c'est du blabla pour remplir la ligne.Et ca c'est du blabla pour remplir la ligne.<br/>
     
     
     
    		    Ceci est une deuxième démonstration de multi-liens <span class="tip" onmouseover="coordElement(this.offsetLeft,this.offsetTop);tooltip('csstips2');" ><a href="http://www.developpez.com/">Lien bis </a>
    			<span id="csstips2"><a class="syst" href="http://www.developpez.net/forums/">Mon lien bis 2 (forum)</a>
    				<a class="syst" href="http://general.developpez.com/cours/">Mon Lien bis 3 (cours)</a>
    				<a class="syst" href="http://xml.developpez.com/sources/">Mon lien bis 4 (source)</a></span></span>, le menu tool tip doit apparaite au passage de la souris....<br/>
    				Voila une ligne en dessous pour voir ce que ca donne, lorsque le lien est au milieu d'un texte.<br/>		
    				Et ca c'est du blabla pour remplir la ligne.Et ca c'est du blabla pour remplir la ligne.<br/>
    				Et ca c'est du blabla pour remplir la ligne.Et ca c'est du blabla pour remplir la ligne.<br/>
     
    		</div>
    			<p id="LBL_pos"></p>
     
     
    </body>
    </html>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DisplayTag] Affichage des liens des pages
    Par jaljal dans le forum Taglibs
    Réponses: 0
    Dernier message: 25/09/2009, 10h50
  2. apparence des titles des liens
    Par Jesmar dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/09/2008, 13h08
  3. Associer des liens à des boutons
    Par tonkhu dans le forum Intégration
    Réponses: 2
    Dernier message: 14/06/2008, 00h07
  4. Des liens, des bouton et IE
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2005, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo