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 :

Coordonnées de la souris


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut Coordonnées de la souris
    Bonjour,

    Pour prendre en charge des évènements coté client, j'ai pour habitude d'utiliser une fonction maison, nommée AddListener, fortement inspirée de ce que l'on peut trouver aisément sur le web.

    Je souhaite l'utiliser pour qu'une bulle d'aide soit affichée au passage de la souris sur certains items de la page. Aussi je procède de la façon suivante :

    AddListener( 'dg_ctl12_labCodeArticle', 'mouseover', BulleAfficher );

    La fonction BulleAfficher ressemblant fortement à ceci :
    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
    function BulleAfficher( evt  )
    {
        var target = evt.target || evt.srcElement;
        ...
        var x = evt ? evt.clientX : window.event.clientX;
        var y = evt ? evt.clientY : window.event.clientY;
        ...
        // div_bulle  == balise div contenant la "bulle"
        // balise obtenue par un moyen que je ne détaille pas içi
        // x est décrémenté de div_bulle.offsetWidth de sorte que le 
        // coin haut droit de la bulle soit positionné à proximité du curseur
        x -= div_bulle.offsetWidth + 8;
        y += 6;
        ...
        div_bulle.style.left = x + 'px';
        div_bulle.style.top = y + 'px';
        div_bulle.style.visibility = 'visible';
    }
    Ce qui me chagrine, dans ce code, c'est que la bulle n'est plus correctement positionnée

    Si l'utilisateur réduit la fenêtre de son navigateur de sorte qu'il lui faille utiliser son "ascenseur horizontal" pour rendre visible l'item dont le survol doit provoquer l'affichage de la bulle,
    Alors la bulle n'est pas positionnée correctement (le calcul pour le left est 'faux' : il n'y a pas de prise en compte du scroll)

    Avez-vous une solution à ce problème ?

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Re Isidore

    Essai ceci:
    pour IE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    event.x + document.body.scrollLeft
    event.y + document.body.scrollTop
    peut etre aaussi besoin de document.documentElement.scrollLeft et top mais a voir suivant ou tu veux positionner

    pour le reste

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut Solution
    Fonctionne sous FireFox 3, IE7, Opéra 9.24, Safari 3.1, le tout sous Windows XP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        var x = (evt ? evt.clientX : window.event.clientX) + (document.body.scrollLeft || document.documentElement.scrollLeft);
     
        var y = (evt ? evt.clientY : window.event.clientY) + (document.body.scrollTop || document.documentElement.scrollTop);
    De fait, je ne suis pas tout à fait certain que la FAQ réponde vraiment à la question, au moins dans toutes les situations...?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par défaut
    Bon ben ça marche ? C'est résolu ?

  6. #6
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    J'utilise ce genre de code, la position de la souris est retournée dans (PosX,PosY) :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    var iev=document.all;
    if(!iev) var mov=document.getElementById;
    if(!mov&&!iev) alert("Application incompatible avec votre navigateur!");
     
    var PosX,PosY;
     
    //====================================================//
    // Supprime le "px" en fin de chaîne -> nombre
    //====================================================//
    function nbr(nombrepx){
      if(nombrepx){
        if(nombrepx.length>=3)
          if(nombrepx.substr(nombrepx.length-2,2)=="px")
            return (nombrepx.substr(0,nombrepx.length-2))*1;
        return nombrepx*1;
      }
      return 0;
    }
     
    //====================================================//
    // Retourne la valeur du scroll
    //====================================================//
    function GetScrollX(){
      if(mov) return nbr(document.body.scrollLeft); 
      if(document.documentElement.scrollLeft)
        return nbr(document.documentElement.scrollLeft);else 
        return nbr(document.body.scrollLeft); 
    }
     
    //====================================================//
    function GetScrollY(){
      if(mov) return nbr(document.body.scrollTop);
      if(document.documentElement.scrollTop)
        return nbr(document.documentElement.scrollTop);else 
        return nbr(document.body.scrollTop); 
    }
     
     
    //====================================================//
    // Détection des coordonnées de la souris
    //====================================================//
    function MyMousePosX(evenement){
      if(mov) return nbr(evenement.clientX)+GetScrollX();
      return nbr(window.event.x)+GetScrollX()-2;
    }
     
    //====================================================//
    function MyMousePosY(evenement){
      if(mov) return nbr(evenement.clientY)+GetScrollY();
      return nbr(window.event.y)+GetScrollY()-2;
    }
     
     
    //====================================================//
    // Souris en mouvement
    //====================================================//
    function Position(evenement){
      PosX=MyMousePosX(evenement);
      PosY=MyMousePosY(evenement);
    }
     
    //====================================================//
    // INITIALISATION
    //====================================================//
    document.onmousemove=Position;

  7. #7
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    ???

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

Discussions similaires

  1. Récupération des coordonnées de la souris
    Par kabil.cpp dans le forum MFC
    Réponses: 11
    Dernier message: 23/05/2008, 06h43
  2. Coordonnées de la souris sur une image
    Par renaud26 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 21h11
  3. Réponses: 6
    Dernier message: 04/12/2005, 15h34
  4. bouger une div selon les coordonnées de la souris
    Par 10-nice dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 21/09/2005, 15h31
  5. Réponses: 2
    Dernier message: 14/09/2005, 18h09

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