France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
23 592 membres enregistrés - 1 913 525 posts - 99 192 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Problème Infobulle JS sous IE
26 connectés(record : 272 le 28 octobre 2008 - 04 h 23)

Vous devez vous connecter pour répondre au topic.
Problème Infobulle JS sous IE

Nitro
== Alternatifs ==

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

D'avance merci



"Nous devons apprendre à vivre comme des frères, sinon nous allons mourir tous ensemble comme des idiots"
Martin Luther King


grabber
Coordinateur
MacBook Pro Powered

Messages : 8 675
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 21 juin 2008 - 09 h 01 m 11 s
hello,

eternel probleme de compatibilite...
alors pour utiliser beaucoup les infobulles sur mes sites, je te conseille en 1er lieu d'abandonner ce script pour utiliser un script tout fait et eprouve :jap:

voici ce que j'utilise pour ma part :

au debut j'utilisais (et j'ai utilise pendant longtemps...) la librairie overlib, elle fonctionne tres bien, tres simple a mettre en place et de nombreuse customisations possibles de la bulle, possibilite de mettre des titres, ...
overlib ici : http://www.bosrup.com/web/overlib/

j'ai abandonne overlib il y a peu car j'ai eu un souci sur un site, je ne sais pas trop pourquoi car je n'ai pas reussi a debugger le truc, donc j'ai adopte une nouvelle methode.

je ne sais pas si tu utilises des frameworks, mais tu peux faire facilement des bulles avec prototype ou jquery ou encore mootools. pour ma part, j'etais sur prototype pendant un bon moment, proto liee a script.aculo.us, mais idem, j'ai recemment eu de sproblemes de compatibilite entre prototype et mootools, donc maintenant je n'utilise plus que mootools.
mootools ici : http://mootools.net/

apres test des bulles, je les trouve encore plus jolies que celles d'overlib, notamment au niveau des effets fade in et fade out.
j'ai reussi a obtenir tout ce que je voulais avec mootools au niveau des bulles, je te conseille de jeter un oeil de ce cote la ;)

alors pourquoi un framework ?
1- pour ne pas reinventer la roue
2- pour eviter les incompatibilites de browsers
3- pour taper un minimum de code
4- car les frameworks ont une grosse communaute de support derriere
5- car il y a des evolutions permanentes

voila voila !!!

ah ! dernier point, n'oublies pas de mettre un doctype valide sur ta page sinon ca va foirer de tous les cotes :jap:

sinon pour ton script desole mais pas trop le temps de m'y plonger, le javascript et IE c'est toujours merdique, il faudrait carrement tester le script en local pour pouvoir te donner la soluce et franchement ce matin j'ai un peu la flemme !!! je vais aller couper ma haie !!!

bonne matinee et bon WE

++

oliv

PS : si t'as des soucis avec mootools n'hesites pas, je t'aiderai.



:firefox:

grabber
Coordinateur
MacBook Pro Powered

Messages : 8 675
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 21 juin 2008 - 09 h 12 m 04 s
tiens vla un tuto pour les bulles mootools ;)
inspires t'en et testes ca sur une page vierge, customises la comme tu le souhaites et tu verras que le resultat pète ;)


edit : vla le lien ;)
http://macmicro.chez-alice.fr/mootools/infobulle/index.php


Message édité 1 fois, la dernière par grabber le 21 juin 2008 - 09 h 12.

:firefox:

Nitro
== Alternatifs ==

Messages : 1 422
Inscrit le 07/03/03
Ville : Grenoble
Non connecté
  Posté le 22 juin 2008 - 19 h 03 m 13 s
Merci grabber pour ces conseils. Dès que j'ai un peu de temps libre je test mootools ! Je post un feedback dès que c'est fait.



"Nous devons apprendre à vivre comme des frères, sinon nous allons mourir tous ensemble comme des idiots"
Martin Luther King


Page genérée en 1.0313 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory