Problème infobulle JS sous IE

Problème infobulle JS sous IE - HTML/CSS - Programmation

Marsh Posté le 14-06-2008 à 10:59:11    

Bonjour à tous,
 
Je dispose d'une fonction Javascript pour afficher des images dans une infobulle lorsque la souris passe dessus. Sous Firefox tout fonctionne très bien, mais sous IE l'infobulle ne se dimensionne pas à la taille de l'image, ce qui fait que cette dernière "sort" de l'infobulle. Voici le code JS :
 

Code :
  1. var xOffset=6
  2. var yOffset=5
  3. var affiche = false; // La variable i nous dit si le bloc est visible ou non
  4. var w3c=document.getElementById && !document.all;
  5. var ie=document.all;
  6. if (ie||w3c) {
  7. var laBulle
  8. }
  9. function ietruebody(){ // retourne le bon corps...
  10. return (document.compatMode && document.compatMode!="BackCompat" )? document.documentElement : document.body
  11. }
  12. function deplacer(e) {
  13.    if(affiche){
  14.       var curX = (w3c) ? e.pageX : event.x + ietruebody().scrollLeft;
  15.       var curY = (w3c) ? e.pageY : event.y + ietruebody().scrollTop;
  16.       var winwidth = ie && !window.opera ? ietruebody().clientWidth : window.innerWidth - 20;
  17.       var winheight = ie && !window.opera ? ietruebody().clientHeight : window.innerHeight - 20;
  18.       var rightedge = ie && !window.opera ? winwidth - event.clientX - xOffset : winwidth - e.clientX - xOffset;
  19.       var bottomedge = ie && !window.opera ? winheight - event.clientY - yOffset : winheight - e.clientY - yOffset;
  20.       var leftedge = (xOffset < 0) ? xOffset*(-1) : -1000
  21.        
  22. // modifier la largeur de l'objet s'il est trop grand...
  23.         if(laBulle.offsetWidth > winwidth / 3){
  24.             laBulle.style.width = winwidth / 3
  25.         }
  26. // si la largeur horizontale n'est pas assez grande pour l'info bulle
  27.         if(rightedge < laBulle.offsetWidth){
  28. // bouge la position horizontale de sa largeur à gauche
  29.         laBulle.style.left = curX - laBulle.offsetWidth + "px"
  30.         }
  31.           else {
  32.             if(curX < leftedge){
  33.             laBulle.style.left = "5px"
  34.          }
  35.             else{
  36. // la position horizontale de la souris
  37.               laBulle.style.left = curX + xOffset + "px"
  38.             }
  39.          }
  40. // même chose avec la verticale
  41.        if(bottomedge < laBulle.offsetHeight){
  42.          laBulle.style.top = curY - laBulle.offsetHeight - yOffset + "px"
  43.        }
  44.          else {
  45.           laBulle.style.top = curY + yOffset + "px"
  46.          }
  47.       }
  48.   }
  49. function showTooltip(text) {
  50.      if (w3c||ie){
  51.        laBulle = document.all ? document.all["bulle"] : document.getElementById ? document.getElementById("bulle" ) : ""
  52.        laBulle.innerHTML = text; // fixe le texte dans l'infobulle
  53.        laBulle.style.visibility = "visible"; // Si il est cachée (la verif n'est qu'une securité) on le rend visible.
  54.        affiche = true;
  55.      }
  56. }
  57. function hideTooltip() {
  58.     if (w3c||ie){
  59.        affiche = false
  60.        laBulle.style.visibility="hidden" // avoid the IE6 cache optimisation with hidden blocks
  61.        laBulle.style.top = '-100000px'
  62.        laBulle.style.backgroundColor = ''
  63.        laBulle.style.width = ''
  64.     }
  65. }
  66. document.onmousemove = deplacer; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle.


 
J'utilise en suite le code suivant sur mon image en HTML :
 

Code :
  1. <a href="#" onmouseover="showTooltip('<div class=\'info\'><strong>Titre image</strong><br /><img id=\'big\' src=\'images/test.jpg\' width=\'700\'></div>');"
  2.   onmouseout="hideTooltip()"><img class="imgleft" id="big" src="images/test.jpg" width=100 height=60 onmouseout="hideTooltip()" /></a>
  3. <div id="bulle"></div>   // permet d'afficher l'infobulle


 
Et enfin les lignes correspondantes dans ma feuille de style :
 

Code :
  1. img {
  2.   border:none;
  3. }
  4.     #bulle {
  5.        position: absolute; visibility: hidden;  font-size:12px;
  6.      }
  7. .info {
  8.   border:1px solid #666666; padding: 7px; color:#666666; background-color:#FFFFFF; font-family:"trebuchet MS";
  9. }


 
 
Quelqu'un aurait il une une piste pour résoudre le problème ?
 
D'avance merci
 

Reply

Marsh Posté le 14-06-2008 à 10:59:11   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed