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:
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 = ' ';
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