Page 1 sur 1

Coordonnées du curseur dans FF...

Publié : 28 mars 2005, 23:12
par Lisaraël
Bonsoir.

Je travaille actuellement sur un javascript qui, en cas de double click dans la page, affiche un petit menu (genre menu du click droit), où l'on a accès à diverses propriétés sympa.

Tout vas pour le mieux, sauf un truc. J'aimerai que, lorsque ce menu apparait (c'est une div en position absolute), il se positionne automatiquement au niveau du curseur de la souris, comme un "vrai" menu contextuel.

je pensais à un truc du style

Code : Tout sélectionner

menu.style.top = clientX + "px";
, mais ça ne marche pas.

Le problème vient de la détection des coordonnées des curseurs, car quand je rentre un nombre fixe et prédéfini, mon menu se place là où il doit se mettre.

Merci bcp.

Publié : 29 mars 2005, 06:14
par Mirovinben
Il te faut stocker la position du curseur souris dans 2 variables globales que tu déclares dans le <head></head>

Code : Tout sélectionner

var bGch=0;
var bTop=0;
puis initialiser le gestionnaire d'évènements juste après le <body> via un truc du type

Code : Tout sélectionner

  document.onmousemove=getMousePos;
où la fonction getMousePos vaut...

Code : Tout sélectionner

function getMousePos(e) {
  if (document.all) {
    bGch=event.x+document.body.scrollLeft;
    bTop=event.y+document.body.scrollTop;
  }
  else {
    bGch=e.pageX; 
    bTop=e.pageY; 
  }
}
Désolé pour le test du navigateur avec document.all... je n'ai pas cherché à améliorer le script (temps, envie...)... Si qq veut se lancer !...

Tous les détails ici, et plus spécialement .

Publié : 29 mars 2005, 12:16
par Lisaraël
Merci bcp, c'est impec'.

Bonne journée.

Publié : 30 mars 2005, 00:25
par Bobe
Voilà:

Code : Tout sélectionner

function getMousePos(e) {
  if( !e ) e = window.event;

  var root  = document.documentElement || document.body;
  var bGch = e.clientX + root.scrollLeft;
  var bTop = e.clientY + root.scrollTop;
  
  if( typeof(e.pageX) != 'undefined' )
  {
     var bugSafari = (e.pageX == e.clientX && root.scrollLeft > 0);
     bugSafari = bugSafari || (e.pageY == e.clientY && root.scrollTop > 0);
     
     if( bugSafari )
     {
         bGch = e.clientX;
         bTop = e.clientY;
     }
  }
}
Un peu long à cause d'un bug de Safari à esquiver.
J'ai pas testé ce code mais c'est ok normalement.

Publié : 30 mars 2005, 00:31
par Lisaraël
merci beaucoup, ça pourra être utile, mais en fait, c'est actuellement un script de travail pour l'école, il ne sera contrôlé que sous Firefox... voire IE, mais je doute.

en tout cas, merci, si je ré-utilise ce script après, je n'oublierai pas cette correction...