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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover = "move;..." ?
    ?
    au début je ne l'appelais pas mais après conseil de E.Bzz j'ai fais ça oui
    Je te met le message en question si tu as perdu une parti du thread
    Citation Envoyé par E.Bzz Voir le message
    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+

  6. #6
    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 le_chomeur Voir le message
    e.bzzz nop l'évènement n'est pas gèré par ie ,
    Evidemment !
    Dans la fonction que j'utilise (dans laquelle je n'ai pas supprimé la gestion des autres browsers qu'IE) je passe dans le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.clientX+document.documentElement.scrollLeft;
    Il faut que j'arrête de répondre quand j'ai pas le temps, Il faut que j'arrête de répondre quand j'ai pas le temps, Il faut que j'arrête de répondre quand j'ai pas le temps, Il faut que j'arrête .....
    Citation Envoyé par Nom Voir le message
    au début je ne l'appelais pas mais après conseil de E.Bzz j'ai fais ça oui
    Via cette fonction ou un équivalent, il faut bien que tu détermines les coordonnées de ta bulle ...

    Arf !

    A+

  7. #7
    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
    je sens qu'on va repartir a 0 ...


    envois le code complet !!

    ^^

  8. #8
    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+

  9. #9
    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 ?

  10. #10
    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+

  11. #11
    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";
    }

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