Pb Affichage infobulle avec Image sous IE

ragmo Messages postés 10 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 16 juillet 2009 - 13 juil. 2009 à 21:22
sltcoach Messages postés 1 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 28 juillet 2009 - 28 juil. 2009 à 17:00
Bonjour,





J'ai besoin d'aide concernant l'affichage d'une infobulle contenant une image qui s'affiche au survole d'une vignette. Comme ça l'internaute n'est pas obliqué de clique pour offrir un popup puis le fermer pour voir l'image en taille réelle. Si en parcourant les vignette une image lui plaît il peut cliquer la vignette et une page détaillée s'affiche. En fait c'est un peu pareil que le zoom, mais je préfère quand même.







J'ai trouvé un script JS : c'est une sorte de combinaison JS + CSS. Le problème c'est que l'image affichée celle qui s'affiche par dessus de la vignette

clignotte
 , et j'ai l'impression la page et l'image se recharge indéfiniment et automatoquement tant que le curseur est par dessus la vignette. Ce comportement arrive de temps en temps et pas sur toutes les images et seulement surInternet Explorer

Je crois que c'est un problème CSS : une combinaison deDisplay : block + Position : absoluteou autre, je n'y vois plus rien et je rends mon tablier.

Est-ce que quelqu'un pourrait m'aider ?

Partie CSS :

.infobulle{
    position: absolute;  
    visibility : hidden;
    border: 1px solid Black;
    padding: 10px;
    font-family: Verdana, Arial;
    font-size: 10px;
  display : block;
    background-color: #FFFFCC;
}

Partie JavaScript :
function move(e) {
  if(i) {  // Si la bulle est visible, on calcul en temps reel sa position ideale
    if (navigator.appName!= "Microsoft Internet Explorer") { // Si on est pas sous IE
    GetId("curseur").style.left=e.pageX + 5+"px";
    GetId("curseur").style.top=e.pageY -200+"px";
    }
    else { // Modif proposé par TeDeum, merci à  lui
    if(document.documentElement.clientWidth>0) {
GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
GetId("curseur").style.top=-300+event.y+document.documentElement.scrollTop+"px";
    } else {
GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
GetId("curseur").style.top=-200+event.y+document.body.scrollTop+"px";
         }
    }
  }
}
 
function montre(text) {
  if(i==false) {
    GetId("curseur").style.visibility="visible"; // Si il est cacher (la verif n'est qu'une securité) on le rend visible.
    GetId("curseur").innerHTML = text; // on copie notre texte dans l'élément html
  i=true;
  }
}
function cache() {
if(i==true) {
GetId("curseur").style.visibility="hidden"; // Si la bulle est visible on la cache
i=false;
}
}
document.onmousemove=move; // dès que la souris bouge, on appelle la fonction move pour mettre à jour la position de la bulle.
//-->

dans body

Affichage vignette + Infobulle :
');" onmouseout ="cache();">[details/repere_xxx.php ]

Désolé de ce long discours mais je voulais juste être clair. Oups, j'espère que vous êtes pas déjà noyé(e)..

1 réponse

sltcoach Messages postés 1 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 28 juillet 2009
28 juil. 2009 à 17:00
Car quand tu passes sur ton image, ton infobulle passe dessus donc tu n'es plus sur ton image donc l'infobulle disparait donc tu es sur ton image et l'infobulle apparait... ainsi de suite d'ou l'effet de clignotement...

Fabrique cela plus comme ça :

HTML :



AVANT LE :



JAVASCRIPT :

<script>var noPicture = false;</script>
<script src="../js/filesearchhover.js" language="Javascript" type="text/javascript"></script>


DANS LE FILE SEARCHHOVER.JS

var itemWidth = 350;

var offsetfrommouse=[15,15]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset

var displayduration=0; //duration in seconds image should remain visible. 0 for always.

var currentimageheight = 400; // maximum image size.



//if (document.getElementById || document.all){
// document.write('
');

// document.write('
');

//}



function gettrailobj(){

if (document.getElementById)

return document.getElementById("trailimageid").style

else if (document.all)

return document.all.trailimagid.style

}



function gettrailobjnostyle(){

if (document.getElementById)

return document.getElementById("trailimageid")

else if (document.all)

return document.all.trailimagid

}





function truebody(){

return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body

}



function showtrail(imagename,title,description,showthumb,height, newItemWidth){



if (newItemWidth != false) {

itemWidth = newItemWidth;

}



if (height > 0){

currentimageheight = height;

}



document.onmousemove=followmouse;



cameraHTML = '';



newHTML = '
';

newHTML = newHTML + '

';



if (showthumb > 0){

newHTML = newHTML + '

' + title + '

';

}
newHTML = newHTML + '
';



gettrailobjnostyle().innerHTML = newHTML;



gettrailobj().visibility="visible";



}





function showhtml(newHtml,height) {



document.onmousemove=followmouse;

newHtml = '
' + newHtml + '
';

gettrailobjnostyle().innerHTML = newHtml;

gettrailobj().visibility="visible";



}



function hidetrail(){

gettrailobj().visibility="hidden"

document.onmousemove=""

gettrailobj().left="-500px"



}



function followmouse(e){



var xcoord=offsetfrommouse[1]

var ycoord=offsetfrommouse[0]



var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15

var docheight=document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(document.body.offsetHeight, window.innerHeight)



if (typeof e != "undefined"){

if (docwidth - e.pageX < itemWidth + 50){

if (noPicture == "yes") {

xcoord = e.pageX - xcoord - itemWidth; // Move to the left side of the cursor

} else {

xcoord = e.pageX - xcoord - itemWidth; // Move to the left side of the cursor

}

} else {

xcoord += e.pageX;

}

if ((docheight - e.pageY) < (currentimageheight + 110)){

ycoord += e.pageY - Math.max(0,(110 + currentimageheight + e.pageY - docheight - truebody().scrollTop));

} else {

ycoord += e.pageY;

}



} else if (typeof window.event != "undefined"){

if (docwidth - event.clientX < itemWidth + 50){

if (noPicture == "yes") {

xcoord = event.clientX + truebody().scrollLeft - xcoord - itemWidth; // Move to the left side of the cursor

} else {

xcoord = event.clientX + truebody().scrollLeft - xcoord - itemWidth; // Move to the left side of the cursor

}

} else {

xcoord += truebody().scrollLeft+event.clientX

}

if (docheight - event.clientY < (currentimageheight + 110)){

ycoord += event.clientY + truebody().scrollTop - Math.max(0,(110 + currentimageheight + event.clientY - docheight));

} else {

ycoord += truebody().scrollTop + event.clientY;

}

}



var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15

var docheight=document.all? Math.max(truebody().scrollHeight, truebody().clientHeight) : Math.max(document.body.offsetHeight, window.innerHeight)



gettrailobj().left=xcoord+"px"

gettrailobj().top=ycoord+"px"



}

Voila normalement tout doit fonctionner... A toi de regarder pour le CSS en fonction des classes.

Bon courage
0
Rejoignez-nous