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 :

recuperer position souris ie


Sujet :

JavaScript

  1. #1
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut recuperer position souris ie
    Bonjour a tous

    je sais ce que vous vous dites avec le titre : "il y a 10 000 codes sur le net"...
    en effet, j'en ai teste pas mal... mais sans succes..
    j'ai teste plein de facon differentes de recuperer la position, mais idem...

    je veux faire une sorte d'infobulle

    pour l'instant, j'en suis rendu la
    Code JavaScript : 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
    function move(e) {
    	if(infobulle) {  // Si la bulle est visible
    		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
    			x = e.pageX - ($("#clear").offset().left);
    			y = e.pageY -  ($("#clear").offset().top) - 140;
        //document.getElementById("infobulle").style.left=e.pageX - ($("#clear").offset().left) + 15 + "px";
        //document.getElementById("infobulle").style.top=e.pageY -  ($("#clear").offset().top) - 140 + "px";
    		}
    	else {// IE
     
    /*divX = getPos(document.getElementById("clear")).l;
    divY = getPos(document.getElementById("clear")).t;
    mouseX = e.clientX + document.body.scrollLeft;//- tempX;
    mouseY = e.clientY + document.body.scrollTop;// - tempY;
    tempX = mouseX - divX;
    tempY = mouseY - divY;*/
    		//x = e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    		x = e.clientX;// + document.body.scrollLeft;//- tempX;
    		y = e.clientY;// + document.body.scrollTop;// - tempY;
    		//x = tempX;
    		//y = tempY;
    	}
    	//alert('x : ' + x + ', y : ' + y);
    	document.getElementById("infobulle").style.left= x + 15 + "px";
    	document.getElementById("infobulle").style.top=  y + 10 + "px";
    	}
    }
    le probleme (sous IE...-troll detected-), c'est que e.clientX et Y se base sur le coin du navigateur...jusque la, pas de probleme... mais si on redimentionne le navigateur, genre on le met pas en fullscreen, ca bouge l'infobulle a l'ouest...

    du coup, je me dis "je vais le caller par rapport au div dans lequel je suis"...
    mais la ou ce devient comique, c'est que le calcul de position d'un div se fait par rapport au div globale du site (je sais pas si c'est super clair)
    du coup, je test... wah, c'est joli...attends, quand on scroll, ca bouge l'infobulle...
    en gros, plus on scroll vers le bas, plus l'infobulle sera hors du site vers le bas, et plus on remonte, plus elle sera haut dans le site (voir meme hors du site vers le haut)

    bref... ca commence a me gonfler severe, et j'en demande a votre grande conaissance avant que le pc passe par la fenetre
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    visiblement tu utilises jQuery, alors pourquoi ne pas l'utiliser en plein
    - event.pageX
    - event.pageY

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = e.clientX;// + document.body.scrollLeft;//- tempX;
    y = e.clientY;
    Le problème, c'est qu'avec IE, e n'existe pas

    Sinon, je comprends pas trop tes explications
    le probleme (sous IE...-troll detected-), c'est que e.clientX et Y se base sur le coin du navigateur...jusque la, pas de probleme... mais si on redimentionne le navigateur, genre on le met pas en fullscreen, ca bouge l'infobulle a l'ouest...

    Le redimensionnement de la fenêtre n'empêche pas le "coin du navigateur" de rester en haut et à gauche de la fenêtre

    plus on scroll vers le bas, plus l'infobulle sera hors du site vers le bas
    T'es en train de nous dire que ton infobulle s'affiche en dehors du navigateur ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    visiblement tu utilises jQuery, alors pourquoi ne pas l'utiliser en plein
    => parceque ca me met une erreur sous ie (et la ligne de l'erreur correspond a mon div infobulle)


    Citation Envoyé par Bovino Voir le message
    Le problème, c'est qu'avec IE, e n'existe pas
    si, je lui passe event lors de l'appel

    Citation Envoyé par Bovino Voir le message
    Le redimensionnement de la fenêtre n'empêche pas le "coin du navigateur" de rester en haut et à gauche de la fenêtre
    c'est sur, mais mon site est centre, donc en fullscreen, il est a ~200px de la gauche (ca depend de la taille de l'ecran), et en mode "fenetre", il est donc a 0px de la gauche

    Citation Envoyé par Bovino Voir le message
    T'es en train de nous dire que ton infobulle s'affiche en dehors du navigateur ?
    non, mais plus on scroll vers le bas, plus l'infobulle descend et arrive un moment ou l’ascenseur du navigateur augmente xD,
    et vers le haut, elle disparait dans les meandres du navigateur
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le problème, c'est qu'avec IE, e n'existe pas
    faux la preuve

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script>
     
    function souris(e){
     
    var setX =e.clientX;
    var setY =e.clientY;
     
    document.getElementById('inpute').value=setX+'  '+setY;
    }
    </script>
     
    </head>
     
    <body onmousemove='souris(event)'>
     
    <input type="texte" id="inpute">
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    </body>
    </html>
    c'est fou

    le probleme avec ie c'est que l'on ne peut pas faire d'ajout dynamique d'evenement tout en lui indiquant un evenement

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par mekal Voir le message
    faux la preuve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onmousemove='souris(event)'>
    Oh le vilain tricheur !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    onmousemove="move(event)"
    => heu c'est comme ca que je fais, c'est pas bon ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Oui et non... mais il est quand même préférable de savoir pourquoi
    Contrairement aux autres navigateurs, IE<9 n'envoie pas en argument à la fonction de rappel l'objet event associé, mais comme window est implicite en JavaScript, c'est bien window.event qui sera envoyé.
    Le seul problème, c'est que dans ce cas, ce sont les autres navigateurs qui ne sont pas contents car du coup, ils attendent 2 paramètres dans la fonction !
    La syntaxe correcte est
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function move(e){
        var evt = e ? e : window.event;
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    ENFIN !!!!!
    merci a vous pour vos lumieres. voici ma solution
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function move(e) {
    	if(infobulle) {  // Si la bulle est visible
    		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
    			document.getElementById("infobulle").style.left = e.pageX - $("#clear").offset().left + 15 + "px";
    			document.getElementById("infobulle").style.top =  e.pageY -  $("#clear").offset().top - 10 + "px";
    		}
    		else {// IE
    			document.getElementById("infobulle").style.left = e.clientX - $("#clear").offset().left + 15 + "px";
    			$(document).bind('mousemove',function(e){ document.getElementById("infobulle").style.top = e.pageY - $("#clear").offset().top - 10 + "px";});
    		}
    	}
    }
    c'est moche, mais fonctionnel
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  10. #10
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    heu, petit detail...
    comment je passe
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    $(document).bind('mousemove',function(e){ document.getElementById("infobulle_" + bloc).style.top = e.pageY - $("#clear").offset().top - 10 + "px";});
    dans une variable y ? (pour faire des tests dessus par la suite)
    genre
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var y;
    $(document).bind('mousemove',function(e){ y = e.pageY - $("#clear").offset().top - 10 + "px"; return y;});
    (j'ai essaye plein de syntaxes, mais aucune ne fonctionne :/
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    il te suffit de mettre à jour cette variable dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var mouseY;  // variable globale
    $(document).bind('mousemove',function(e){
        mouseY = e.pageY - $("#clear").offset().top - 10 + "px";
        // return y; devient inutile
      });
    c'est moche, mais fonctionnel
    on ne peut pas te donner tord

    Il faut dans cette fonction uniquement récupérer la position brute, pourquoi ajouter une récupération de position et un calcul?

    Citation Envoyé par Doksuri
    => parceque ca me met une erreur sous ie (et la ligne de l'erreur correspond a mon div infobulle)
    c'est peut être de ce coté qu'il faudrait corriger...

  12. #12
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    merci pour ta reponse, je l'ai mis en variable globale et ca passe bien

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="infobulle_<?php echo $i; ?>" class="infobulle_<?php echo $i; ?>" style="
    position:absolute;
    display:none;
    top:25px;
    border:1px solid Black;
    padding:8px;
    font-family:Verdana, Arial;
    font-size:10px;
    background-color:#FFFFCC;"></div>
    mon infobulle est vraiment basique... je ne pense pas que ca vienne de la le probleme :/
    quoi qu'il en soit... c'est fonctionnel...
    ca rame a mort sous IE... mais c'est IE hein...
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme g_signal_connect et recuperation position de la souris
    Par Pinki_Wookie dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 05/03/2009, 14h09
  2. Détecter position souris
    Par Glosialabolas dans le forum Linux
    Réponses: 3
    Dernier message: 17/11/2005, 08h42
  3. Réponses: 2
    Dernier message: 11/09/2005, 05h25
  4. [MFC] position souris. systeme de coordonnées
    Par Gloubi99 dans le forum MFC
    Réponses: 2
    Dernier message: 20/07/2005, 11h57
  5. Réponses: 3
    Dernier message: 16/08/2004, 10h57

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