flophp
Messages postés2Date d'inscriptionmercredi 13 décembre 2000StatutMembreDernière intervention 6 octobre 2008
-
6 oct. 2008 à 00:39
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
7 oct. 2008 à 10:23
Bonjour, je souhaite créer une infobulle au passage de la souris sur une image.
Sur Firefox le resultat est OK, une div se crée à coté de l'image avec ses caracteristiques et son texte.
Par contre sous IE, seul le texte apparait en dehors de mon body (la div avec sa taille, border, color n'apparaissent pas)
j'appelle dans mon fichier php le javascript comme ceci:
- startAideLigne fait apparaitre la bulle
- aideLigne fait un suivi de la souris
- stopAideLigne enleve la bulle
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ensuite dans monfichier js function getEl(id) {
return document.getElementById(id);
}
var valX;
var valY;
var ecartX;
var ecartY;
var draging = false;
var monElAide = null;
function getMouse(e) // fonction pour récuperer les coordonées du curseur
{
valX = e.clientX;
valY = e.clientY;
}
function startAideLigne(e,el) { // affiche la bulle d'aide
var monDiv = document.createElement('DIV');
var nom = el.getAttribute('id');
var body = document.getElementsByTagName('BODY')[0];
draging = true;
monDiv.setAttribute('style', 'position:absolute; width:200px; border:solid 1px black; background-color:yellow;');
monDiv.setAttribute('id', 'aide' + nom);
monDiv.innerHTML = appelAide(nom); //appelAide() renvoie le contenu de la bulle
body.appendChild(monDiv);
getMouse(e);
monDiv.style.top = valY - parseInt(monDiv.offsetHeight) - 5 + "px";
monDiv.style.left = valX + 5 + "px";
ecartY = valY - parseInt(monDiv.offsetTop);
ecartX = valX - parseInt(monDiv.offsetLeft);
monElAide = monDiv;
}
function aideLigne(e) { // pour gérer le déplacement de la bulle d'aide par rapport au curser
var valX2 =0;
var body = document.getElementsByTagName('BODY')[0];
if(draging == true)
{
getMouse(e);
if(valX>(parseInt(body.offsetWidth)-parseInt(monElAide.offsetWidth))){
valX2 = valX - parseInt(monElAide.offsetWidth) - 10;
}
else{
valX2 = valX;
}
monElAide.style.left = valX2 - ecartX + "px";
monElAide.style.top = valY - ecartY + "px";
}
}
function stopAideLigne() { // pour enlever la bulle d'aide
draging = false;
monElAide.parentNode.removeChild(monElAide);
}
Voilà, j'espere avoir été clair dans mon soucis d'affichage IE.
Merci d'avance pour vos reponses.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 7 oct. 2008 à 10:23
>>il y avait une difference entre FF et IE au niveau des setAttribute
y'a pas qu'là, mais là aussi ;o)
je te disais : pas regardé plus loin... il en reste peut-être des incompatibilités !
( c'était loin d'être une supputation )
maintenant, perso, j'évite les set | get Attribute
monDiv.style.???=valeur
ou, comme dans ton cas, monDiv.className=
pas regardé plus loin... il en reste peut-être des incompatibilités !
le debogage + rechercher dans la doc t'aidera
FireFox
, regarder la "console d'erreurs"
Outils / Console d'erreurs
et mieux : télécharger mon Site][M'écrire]
flophp
Messages postés2Date d'inscriptionmercredi 13 décembre 2000StatutMembreDernière intervention 6 octobre 2008 6 oct. 2008 à 21:08
Bonjour et merci Bultez pour ta réponse, je l'ai bien integré par :
function getMouse(e) { // fonction pour récuperer les coordonées du curseur
if(navigator.appName=="Microsoft Internet Explorer"){
valX = event.x + document.body.scrollLeft;
valY = event.y + document.body.scrollTop;
}
else {
valX = e.clientX;
valY = e.clientY;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Mais celà n'a pas resolu le probleme de monDiv qui ne trouve pas ses attributs de style, et j'ai trouvé qu'il y avait une difference entre FF et IE au niveau des setAttribute('style','.........')
En effet ceci fonctionne sous FF:
monDiv.setAttribute('style', 'position:absolute; width:200px; background-color:yellow; border:solid 1px black;');
par contre sous IE non, il faut passer par :
monDiv.style.setAttribute("cssText","position:absolute; width:200px; background-color:yellow; border:solid 1px black;");
Donc il faut refaire un test du navigateur comme pour getMouse()
Voilà en esperant que cela puisse servir à quelqu'un d'autre
J'ai fais d'autre modifs entre temps sur ce code, si vous souhaitez une info hesitez pas.