IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Infobulle sur une image


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut Infobulle sur une image
    Bonjour à tous,
    j'aimerai mettre en place un système d'infobulle sur une image
    Pour cela j'ai découpé une zone cliquable sur mon image puis à l'aide de script trouvé sur le net, j'ai pu insérer une infobulle sur cette zone
    Seulement le problème est que j'ai un lien dans cette infobulle mais il m'est impossible de cliquer dessus

    Si vous pouviez m'aider à résoudre ce problème

    script javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    function GetId(id)
    {
    	return document.getElementById(id);
    }
    var i=false; // La variable i nous dit si la bulle est visible ou non
     
    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 + 10+"px";
    		}
    		else 
    		{ 
    			if(document.documentElement.clientWidth>0) 
    			{
    				GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
    				GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px";
    			}
    			else
    			{
    				GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
    				GetId("curseur").style.top=10+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; // des que la souris bouge, on appelle la fonction move pour mettre à  jour la position de la bulle.
    script css
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .infobulle
    {
    	position: absolute;   
    	visibility : hidden;
    	border: 1px solid Black;
    	padding: 10px;
    	font-family: Verdana, Arial;
    	font-size: 10px;
    	background-color: #FFFFCC;
    }

    script html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <IMG NAME="projet6400" SRC="projet640.png" WIDTH="640" HEIGHT="394" BORDER="0" USEMAP="#projet640"/>
    <MAP NAME="projet640">
    <AREA SHAPE="rect" COORDS="5,0,148,60" HREF="www/doc/doc1.ppt" TARGET="_self" ALT="Doc1"  onmouseover="montre('un peu de texte, <a href=\'www.google.fr\'>lien</b> !');" onmouseout="cache();">
    </MAP>
    <div id="curseur" class="infobulle">
    </div>
    </BODY>
    </HTML>

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour à tous
    j'ai pensé ajouté une temporisation afin de pouvoir cliquer sur le lien et ça fonctionne seulement l'infobulle n'apparait plus au bonne endroit (car j'ai été obligé de décommenter l'appel à la fonction move)

    voici donc le nouveau code :

    script javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function GetId(id)
    {
    	return document.getElementById(id);
    }
    var i=false; 
     
    function montre(text)
    {
    	if(i==false) 
    	{
    	  GetId("curseur").style.visibility="visible"; 
    	  GetId("curseur").innerHTML = text; 
    	  i=true;
    	}
    }
     
    function cache()
    {
    	if(i==true)
    	{
    		GetId("curseur").style.visibility="hidden"; 
    		i=false;
    	}
    }
     
    function tempo()
    {
    	setTimeout("cache()",5000);
    }
    script html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <IMG NAME="projet6400" SRC="projet640.png" WIDTH="640" HEIGHT="394" BORDER="0" USEMAP="#projet640"/>
    <MAP NAME="projet640">
    <AREA SHAPE="rect" COORDS="5,0,148,60" HREF="www/doc/doc1.ppt" TARGET="_self" ALT="Doc1"  onmouseover="montre('un peu de texte, <a href=\'www.google.fr\'>lien</b> !');" onmouseout="tempo();">
    </MAP>
    <div id="curseur" class="infobulle">
    </div>
    </BODY>
    </HTML>

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Re-bonjour,
    effectivement, la tempo peut poser problème.
    Mais si tu dois intervenir dans la bulle, il ne faut plus qu'elle se déplace une fois affichée.
    Essaye d'enlever
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.onmousemove=move;
    et de n'appeler la fonction move() qu'au moment de l'affichage (dans le AREA) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover="move();montre('un peu de texte......');"
    A+

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Re-bonjour
    Hélas, cela ne résous pas le problème, l'infobulle ne s'affiche toujours pas au bon endroit (j'ai essayé sur IE et firefox et même constat)

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Nom Voir le message
    j'ai pensé ajouté une temporisation afin de pouvoir cliquer sur le lien et ça fonctionne seulement l'infobulle n'apparait plus au bonne endroit (car j'ai été obligé de décommenter l'appel à la fonction move)
    Ma proposition était sous-entendue "avant la modification concernant la tempo"

    Marche toujours pas ?

    EDIT : Arf !
    Du coup, faut enlever le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if(i) // Si la bulle est visible, on calcul en temps reel sa position ideale
    	{
    puisque move() n'est appelé que quand la bulle va être affichée (et non plus à chaque mouvement de souris), mais par contre, elle est toujours masquée à cet instant ...

    A+

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Excuse moi je n'avais pas vu qu'il y avait une erreur javascript avec l'utilisation de move comme tu l'avais suggéré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onmouseover="move();montre('un peu de texte......');"
    En effet en l'utilisant ainsi il manque un paramètre à la fonction move
    par contre je ne sais pas trop quoi mettre ?

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Nom Voir le message
    par contre je ne sais pas trop quoi mettre ?
    Enlève le paramètre de la déclaration de la fonction.
    "e" représente implicitement l'évènement ayant déclenché l'appel.

    A+

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Oui j'avais essayé
    Ça fonctionne sur IE mais sur Firefox en revanche l'infobulle n'apparait même plus
    Et forcément j'ai l'erreur de javascript indiqué précédemment puisque e n'est pas défini dans cette parti de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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 + 10+"px";
    }

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Pour les autres nav tu peux remplacer e.pageX par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.clientX+document.documentElement.scrollLeft;
    et e.pageY par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.clientY+document.documentElement.scrollTop;
    (ceci dit je ne développe que "pour" IE )

    A+

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Cette fois, il m'indique que la variable event n'est pas défini

  11. #11
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    sous ie il faut recréer l'évènement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // compatibilité ie ( e = event ! )
              if (!e) var e = window.event;

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour le_chomeur et merci de te joindre à nous pour tenter de résoudre mon problème

    alors si je comprend bien, tu m'indique de remettre e.pageX et e.pageY
    ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (navigator.appName!="Microsoft Internet Explorer") // Si on est pas sous IE
    { 
    	var e = window.event;
    	GetId("curseur").style.left=e.pageX + 5+"px";
    	GetId("curseur").style.top=e.pageY + 10+"px";
    }
    et chose étrange, la toolbar de webdevelopeur continue à me dire que e n'est pas définie

    EDIT: en te relisant, je commence à penser que j'ai mal compris

  13. #13
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function move(e){
    if (navigator.appName!="Microsoft Internet Explorer") // Si on est pas sous IE
    { 
    	e = window.event;
    }
    	GetId("curseur").style.left=e.pageX + 5+"px";
    	GetId("curseur").style.top=e.pageY + 10+"px";
    }

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    c'est pire
    Sur Firefox toujours e indéfini et sur IE une erreur javascript aussi mais j'ignore comment les voir
    Du coup mon infobulle ne s'affiche sur aucun des 2 navigateurs

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Heu ... 2 trucs au cas où :
    • on est là dans le passage != IE
    • pense à virer l'accolade en trop

    A+

  16. #16
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    tu peux me montrer comment tu l'appel ?

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Heu ... 2 trucs au cas où :
    • on est là dans le passage != IE
    • pense à virer l'accolade en trop

    A+
    Oui moi aussi ça m'a surpris
    D'après le code donné par le_chomeur, j'avais compris qu'il fallait largement réduire la fonction move
    et donc l'accolade ne serait pas en trop

    Citation Envoyé par le_chomeur Voir le message
    tu peux me montrer comment tu l'appel ?
    oui bien sur, je l'appel comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover="move();montre('un peu de texte, <a href=\'http://www.google.fr\'>lien</b> !'); " onmouseout="tempo();">
    comme me l'avais conseillé E.Bzz

  18. #18
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover = "move;..." ?
    ?

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Pour info (car pas bien le temps de suivre le thread ), j'utilise une fonction équivalente dans laquelle je ne passe pas l'évènement en paramètre, et le "e" est pourtant reconnu ...
    Sous IE 6 ()

    A+

  20. #20
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    e.bzzz nop l'évènement n'est pas gèré par ie , ou alors je veux bien voir ton code , cf : mon truc de drag and drop dans les contributions

Discussions similaires

  1. Infobulle sur une image (onmouseover )
    Par atk_49 dans le forum Excel
    Réponses: 6
    Dernier message: 08/09/2014, 16h58
  2. Problème infobulle sur une image
    Par absot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 05/01/2011, 12h13
  3. Infobulle sur une image
    Par HwRZxLc4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/04/2007, 11h59
  4. [Avertis]Problème Infobulle/Popup Onmouseover sur une image
    Par Yanos dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/05/2006, 14h10
  5. Une infobulle à partir des coordonnées sur une image
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo