2009-11-08 5 views
3

J'ai joint un écouteur de mise au point à la fenêtre (en utilisant la syntaxe prototype):déterminer la position de la souris sur un événement de mise au point de la fenêtre

Event.observe(window, 'focus', focusCb.bindAsEventListener(this)); 

Je veux déterminer la position de la souris lorsque la fenêtre se concentre. Malheureusement, dans ma méthode focusCb, je ne semble pas avoir accès à pageX, pageY, clientX ou clientY.

En utilisant quirksmode code:

function doSomething(e) { 
    var posx = 0; 
    var posy = 0; 
    if (!e) var e = window.event; 
    if (e.pageX || e.pageY)  { 
     posx = e.pageX; 
     posy = e.pageY; 
    } 
    else if (e.clientX || e.clientY) { 
     posx = e.clientX + document.body.scrollLeft 
      + document.documentElement.scrollLeft; 
     posy = e.clientY + document.body.scrollTop 
      + document.documentElement.scrollTop; 
    } 

    // posx and posy contain the mouse position relative to the document 
    // Do something with this information 
} 

Je reçois toujours 0, 0.

Je pensais que l'événement de mise au point aurait des informations de position de la souris. Pourquoi l'événement de focus n'a-t-il pas cette information?

  1. Plus important encore, comment devrais-je obtenir la position de la souris lorsque la fenêtre est mise au point?
+2

événements de discussion peuvent se produire avant que la souris a été « planait » dans la fenêtre par le système d'exploitation. Ainsi, il n'a pas de position. –

Répondre

1

IE a clientX et clientY dans le event object; bien que ce soit le seul.

Oui, cela semble assez horrible. Voir la section sur this page à propos de la position de la souris. Je pense qu'il fait un travail assez approfondi pour l'examiner. OK, je vois que vous utilisez déjà son script. Soupir.

+0

Merci; J'ai clarifié la question pour inclure le code quirksmode que j'utilise pour obtenir le mouseposition dans différents navigateurs. – jedierikb

+0

Oui, à ce stade, je cherche juste comme vous. Voir le lien que je viens de poster. –

0

Vous pouvez capturer l'événement onclick de la fenêtre et placer la position dans une variable de portée globale.

EDIT: Aussi, si vous utilisez un prototype, vous devriez avoir accès aux méthodes pointerX et pointerY de l'objet événement.

+0

Cela pourrait fonctionner, mais pas si je tabule dans la fenêtre. – jedierikb

+0

Eh bien dans ce cas, vous pourriez regarder l'événement onmousemove alors. – Myles

1

Selon les circonstances, il peut être pas exactement ce que vous cherchez, mais vous pouvez, après la mise au point, attendre le prochain événement mousemove et l'utilisation qui coordonne, quelque chose le long de cette ligne:

var x = 0, y = 0, window_got_focus = false; 
window.onfocus = function() { window_got_focus = true }; 
document.onmousemove = function (event) { 
    if (window_got_focus) { 
    window_got_focus = false; 
    x = event.clientX; 
    y = event.clentY; 
    } 
}; 

L'inconvénient est, bien sûr, que vous obtenez les coordonnées seulement dès que l'utilisateur déplace la souris après la mise au point.

0

appel doSomething() fonction sur le mouvement de la souris

document.onmousemove = function (e) 
{ 
    doSomething(e); 
}; 
Questions connexes