Come ottenere la posizione del mouse in jQuery senza eventi del mouse?


101

Vorrei ottenere la posizione corrente del mouse ma non voglio usare:

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

perché ho solo bisogno di ottenere la posizione ed elaborare le informazioni


3
.pageX e .pageY possono essere letti da qualsiasi evento, non solo da .mousemove (). Ad esempio, forse vuoi sapere esattamente dove un utente ha cliccato all'interno di un particolare div: Ecco un esempio in cui ascoltiamo un evento click all'interno di un particolare div chiamato #special. ..... docs.jquery.com/…
Haim Evgi

questo può anche aiutarti a ottenere le posizioni del puntatore del mouse per i siti reattivi. kvcodes.com/2014/03/…
Kvvaradha

Risposte:


151

Non credo che ci sia un modo per interrogare la posizione del mouse, ma puoi usare un mousemovegestore che memorizza solo le informazioni, così puoi interrogare le informazioni memorizzate.

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) {
        // ....
    }
});

Ma quasi tutto il codice, ad eccezione del setTimeoutcodice e simili, viene eseguito in risposta a un evento e la maggior parte degli eventi fornisce la posizione del mouse. Quindi il tuo codice che deve sapere dove si trova il mouse probabilmente ha già accesso a quelle informazioni ...


7
$(window).load(function(e){ console.log(e.pageX,e.pageY); });restituisce undefined per la posizione del mouse
spb

9
@TJCrowder Abbastanza ovvio penso, sta dicendo che c'è un evento là fuori che non fornisce la posizione del mouse, per rispondere alla risposta affermando che "quasi tutti (tutti?)" Gli eventi forniscono la posizione del mouse.
fabspro

2
Nella difesa di @TJCrowder ha detto QUASI tutto. Rispondendo con uno che non è così utile o propositivo. Penso che il punto di questa risposta sia mostrare all'utente che nel suo esempio non deve usare il movimento del mouse ... può usare qualsiasi cosa. L'utente non ha specificatamente detto di ottenerlo senza un evento, cosa che TJCrowder sottolinea che quasi TUTTO il codice accade dopo ALCUNI eventi. Ovviamente lo menziona DOPO aver mostrato un modo praticabile per rendere la tua funzione che fa ciò di cui ha bisogno. La risposta mi ha aiutato comunque.
Tyler

1
@Tyler: grazie. :-) "quasi tutto" è stato un cambiamento successivo, il mio linguaggio iniziale era troppo forte.
TJ Crowder

26

Non puoi leggere la posizione del mouse in jQuery senza utilizzare un evento. Nota in primo luogo che le proprietà event.pageXe event.pageYesistono su qualsiasi evento, quindi potresti fare:

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

La tua altra opzione è usare una chiusura per dare al tuo intero codice l'accesso a una variabile che viene aggiornata da un gestore mousemove:

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

// do something with mouseX and mouseY

Un problema con questo è che non hai pageX e pageY o clientX e clientY durante il trascinamento in Firefox ... Qualche modo per ottenere pageY durante il trascinamento?
JamesTBennett

11

Ho usato questo metodo:

$(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);
}

In questo modo avrò sempre la distanza dall'alto salvata in y e la distanza da sinistra salvata in x.


6

Inoltre, gli mousemoveeventi non vengono attivati ​​se esegui il drag'n'drop su una finestra del browser. Per tenere traccia delle coordinate del mouse durante il drag'n'drop dovresti collegare il gestore per l' document.ondragoverevento e utilizzare la sua proprietà originalEvent.

Esempio:

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

2

usa window.event- contiene l'ultimo evente come qualsiasi altro eventcontiene pageX, pageYecc. Funziona per Chrome, Safari, IE ma non FF.


0
var CurrentMouseXPostion;
var CurrentMouseYPostion;

$(document).mousemove(function(event) {
    CurrentMouseXPostion = event.pageX;
    CurrentMouseYPostion = event.pageY;
});

Crea un eventListener sull'oggetto principale, nel mio caso l'oggetto documento, per ottenere le coordinate del mouse ogni fotogramma e memorizzarle in variabili globali, e così puoi leggere Y & Z del mouse ogni volta che vuoi, dove vuoi.


-1

Mi sono imbattuto in questo, sarebbe bello condividerlo ...

Che cosa ne pensate?

$(document).ready(function() {
  window.mousemove = function(e) {
    p = $(e).position();  //remember $(e) - could be any html tag also.. 
    left = e.left;        //retrieving the left position of the div... 
    top = e.top;          //get the top position of the div... 
  }
});

e boom, eccolo qui ..

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.