107 votes

Comment obtenir la position de la souris en jQuery sans mouse-events ?

Je voudrais obtenir la position actuelle de la souris mais je ne veux pas utiliser :

$(document).bind('mousemove',function(e){ 
        $("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); 
}); 

parce que j'ai juste besoin d'obtenir la position et de traiter l'information

3 votes

.pageX et .pageY peuvent être lus à partir de n'importe quel événement, pas seulement .mousemove(). Par exemple, vous voulez peut-être savoir exactement où un utilisateur a cliqué à l'intérieur d'une division particulière : voici un exemple où nous écoutons un événement de clic à l'intérieur d'une division particulière appelée #special. ..... docs.jquery.com/

0 votes

Cela peut également vous aider à obtenir l'emplacement du pointeur de la souris pour les sites réactifs. kvcodes.com/2014/03/

160voto

T.J. Crowder Points 285826

Je ne crois pas qu'il y ait un moyen de requête la position de la souris, mais vous pouvez utiliser un mousemove qui ne fait que stocker l'information, afin que vous puissiez interroger l'information stockée.

jQuery(function($) {
    var currentMousePos = { x: -1, y: -1 };
    $(document).mousemove(function(event) {
        currentMousePos.x = event.pageX;
        currentMousePos.y = event.pageY;
    });

    // ELSEWHERE, your code that needs to know the mouse position without an event
    if (currentMousePos.x < 10) {
        // ....
    }
});

Mais presque tout le code, autre que setTimeout et autres, s'exécute en réponse à un événement, et la plupart des événements fournissent la position de la souris. Donc votre code qui a besoin de savoir où se trouve la souris a probablement déjà accès à cette information...

7 votes

$(window).load(function(e){ console.log(e.pageX,e.pageY); }); retourne undefined pour la position de la souris

9 votes

@T.J.Crowder Assez évident je pense, il dit qu'il existe un événement qui ne fournit pas la position de la souris, pour répondre à la réponse affirmant que "presque tous (tous ?)" les événements fournissent la position de la souris.

2 votes

Pour la défense de @T.J.Crowder, il a dit presque tout. Répondre par une réponse qui ne le fait pas n'est pas si utile ou intentionnel. Je pense que le but de cette réponse est de montrer à l'utilisateur que dans son exemple il n'est pas obligé d'utiliser le déplacement de la souris... il peut utiliser n'importe quoi. L'utilisateur n'a pas spécifiquement dit qu'il fallait l'obtenir sans événement, ce que T.J.Crowder souligne, presque TOUT le code se fait après UN événement. Bien sûr, il mentionne cela APRÈS avoir montré un moyen viable de créer votre propre fonction qui fait ce dont il a besoin. La réponse m'a quand même aidé.

27voto

lonesomeday Points 95456

Vous ne pouvez pas lire la position de la souris dans jQuery sans utiliser un événement. Notez tout d'abord que la fonction event.pageX y event.pageY existe sur n'importe quel événement, donc vous pouvez le faire :

$('#myEl').click(function(e) {
    console.log(e.pageX);
});

L'autre option consiste à utiliser une fermeture pour donner à l'ensemble de votre code l'accès à une variable qui est mise à jour par un gestionnaire de déplacement de souris :

var mouseX, mouseY;
$(document).mousemove(function(e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
}).mouseover(); // call the handler immediately

// do something with mouseX and mouseY

0 votes

Le problème, c'est que vous n'avez pas de pageX et pageY ou clientX et clientY lorsque vous faites glisser la souris dans Firefox... Y a-t-il un moyen d'obtenir la pageY lors d'un glissement ?

13voto

Nicu Criste Points 71

J'ai utilisé cette méthode :

$(document).mousemove(function(e) {
    window.x = e.pageX;
    window.y = e.pageY;
});

function show_popup(str) {
    $("#popup_content").html(str);
    $("#popup").fadeIn("fast");
    $("#popup").css("top", y);
    $("#popup").css("left", x);
}

De cette façon, j'aurai toujours la distance depuis le haut enregistrée en y et la distance depuis la gauche enregistrée en x.

6voto

Alfishe Points 347

De plus, mousemove ne sont pas déclenchés si vous effectuez un glisser-déposer sur une fenêtre de navigateur. Pour suivre les coordonnées de la souris pendant le glisser-déposer, vous devez attacher un gestionnaire d'événement pour document.ondragover et utiliser sa propriété originalEvent.

Exemple :

var globalDragOver = function (e)
{
    var original = e.originalEvent;
    if (original)
    {
        window.x = original.pageX;
        window.y = original.pageY;
    }
}

2voto

Alex Tsurika Points 69

Utiliser window.event - il contient le dernier event et comme tout event contient pageX , pageY etc. Fonctionne pour Chrome, Safari, IE mais pas FF.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X