Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème positionnement d'infobulle

Javascript, IE, Doctype

    29 août 2006 à 4:44:28

    Bonjour,

    J'utilise un script d'info-bulle en javascript, qui positionne une div en fonction de la position de la souris. C'est un script utilisé sur plusieurs sites, donc qui fonctionne très bien. Sauf...

    Sauf quand j'ajoute le Doctype de la page.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


    Ce Doctype est incompatible avec les fonctions document.body.scrollTop et document.body.scrollLeft sous IE.

    Résultat, dès qu'on scroll la page, les infobulles ne sont plus du tout placées au niveau de la souris, mais bien au dessus (Ou à gauche si on scroll horizontalement, mais c'est plus rare ^^ )

    Bref, la question :

    Existe t-il une fonction Javascript qui permette de récupérer la position de la souris en tenant compte du scroll de la page, compatible IE avec le Doctype précédemment cité ? Si oui, laquelle ?


    J'ai vu un script d'infobulle intégralement codé en css, mais sous IE, il ne fonctionne qu'à l'intérieur de balises <a></a>. C'est pas un problème insurmontable, mais je préfère modifier un peu ma fonction d'infobulle que de revoir entièrement toutes mes pages pour remplacer le JavaScript par les info bulles en CSS ^^

    Merci :)
    • Partager sur Facebook
    • Partager sur Twitter
      29 août 2006 à 13:30:41

      Connaitre la position de la souris, c'est possible mais à chaque fois qu'un évenement est créée (onclick par exemple):


      var node = document; //Pour toute la page
      fonctionEv function (e)
      {
              var mouseX      =     e.pageX?e.pageX:e.offsetX;   //e.clientX = ie
              var mouseY      =     e.pageY?e.pageY:e.offsetY;   //e.clientX = ie
              alert(mouseX + " " + mouseY);
      }
      if ( node.attachEvent )
              node.attachEvent("onclick",fonctionEv)//Ie fonction
      else
              node.addEventListener("click",fonctionEv,true)//Pour les autres


      Avec node qui est l'élément receveur. Si tu remplace click par mousemove, tu peux déclencher l'évenment à chaque fois que la souris bouge et donc avec les coordonnées de la souris mises à jour en permanence.
      • Partager sur Facebook
      • Partager sur Twitter
        29 août 2006 à 13:48:32

        Citation : Snada

        tu peux toujours aller voir ici

        http://www.siteduzero.com/tuto-3-5272-1-modifier-l-apparence-d-une-infobulle.html



        Citation : Veldryn

        J'ai vu un script d'infobulle intégralement codé en css, mais sous IE, il ne fonctionne qu'à l'intérieur de balises <a></a>. C'est pas un problème insurmontable, mais je préfère modifier un peu ma fonction d'infobulle que de revoir entièrement toutes mes pages pour remplacer le JavaScript par les info bulles en CSS



        ^^


        Pour Boo2M0rs0 :

        Actuellement, j'ai un onMouseOver sur chaque élément sur lequel je veux afficher une info-bulle, qui appelle la fonction JavaScript.

        L'avantage : Je passe en paramètre l'objet survolé, et la fonction devient indépendante. Ce que j'imagine mal faire avec une fonction appelée à chaque déplacement de la souris (Il faudrait tester l'élément sur lequel elle se trouve, trouver la bulle correspondante, ... Ouh là, ça dépasse mes compétences :p )

        J'utilise donc document.onmousemove=getMousePos; à l'intérieur d'une fonction en début de page, puis je récupère la position de la souris grâce à event.x et event.y sous IE, et posX et posY pour les autres, à l'intérieur de la fonction AffBulle(); (Qui est appelée par l'attribut onmousemove uniquement sur les éléments possédant une info-bulle).

        Le problème étant que event.x et event.y ne tiennent pas compte du scroll de la page, et que l'attribut document.body.scrollLeft ne fonctionne pas avec le Doctype que j'utilise.

        Bref, avant de recoder entièrement mon script d'infobulle (Que ce soit en css avec le tuto, ou en javascript en faisant comme tu me dis), j'aimerais savoir s'il existe une manière simple de modifier juste les 2 lignes qui me gênent (A savoir scrollTop et scrollLeft), sans devoir intégralement revoir mon script ^^ (Parce qu'il y a beaucoup d'info-bulles, et traquer tous les appels de la fonction pour les remplacer par autre chose, c'est long... :p )

        Merci :)
        • Partager sur Facebook
        • Partager sur Twitter

        Problème positionnement d'infobulle

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown