Wie erhalte ich die Mausposition in jQuery ohne Mausereignisse?

101

Ich möchte die aktuelle Mausposition erhalten, möchte aber nicht Folgendes verwenden:

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

weil ich nur die Position bekommen und die Informationen verarbeiten muss

Martin Vseticka
quelle
3
.pageX und .pageY können von jedem Ereignis abgelesen werden, nicht nur von .mousemove (). Zum Beispiel möchten Sie vielleicht genau wissen, wo ein Benutzer in ein bestimmtes Div geklickt hat: Hier ist ein Beispiel, in dem wir auf ein Klickereignis in einem bestimmten Div namens #special warten. ..... docs.jquery.com/…
Haim Evgi
Dies kann Ihnen auch dabei helfen, die Mauszeigerpositionen für reaktionsfähige Sites zu ermitteln. kvcodes.com/2014/03/…
Kvvaradha

Antworten:

151

Ich glaube nicht, dass es eine Möglichkeit gibt, die Mausposition abzufragen , aber Sie können einen mousemoveHandler verwenden, der nur die Informationen speichert, damit Sie die gespeicherten Informationen abfragen können.

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

Aber fast der gesamte Code außer setTimeoutCode und dergleichen wird als Reaktion auf ein Ereignis ausgeführt, und die meisten Ereignisse geben die Mausposition an. Ihr Code, der wissen muss, wo sich die Maus befindet, hat wahrscheinlich bereits Zugriff auf diese Informationen ...

TJ Crowder
quelle
7
$(window).load(function(e){ console.log(e.pageX,e.pageY); });gibt undefiniert für
Mausposition zurück
9
@TJCrowder Ziemlich offensichtlich, denke ich, er sagt, dass es da draußen ein Ereignis gibt, das nicht die Mausposition liefert, um auf die Antwort zu antworten, dass "fast alle (alle?)" Ereignisse die Mausposition liefern.
Fabspro
2
In der @ TJCrowder-Verteidigung hat er fast alles gesagt. Indem Sie mit einem antworten, der nicht allzu hilfreich oder zielgerichtet ist. Ich denke, der Sinn dieser Antwort ist es, dem Benutzer zu zeigen, dass er in seinem Beispiel keine Mausbewegung verwenden muss ... er kann alles verwenden. Der Benutzer hat nicht ausdrücklich gesagt, dass er es ohne Ereignis erhalten soll, was TJCrowder darauf hinweist, dass fast ALLER Code nach EINEM Ereignis auftritt. Natürlich erwähnt er dies, nachdem er einen praktikablen Weg aufgezeigt hat, um eine eigene Funktion zu erstellen, die das tut, was er braucht. Antwort hat mir trotzdem geholfen.
Tyler
1
@ Tyler: Danke. :-) "fast alles" war eine spätere Änderung, meine Ausgangssprache war zu stark.
TJ Crowder
26

Sie können die Mausposition in jQuery nicht lesen, ohne ein Ereignis zu verwenden. Beachten Sie zunächst, dass die Eigenschaften event.pageXund event.pageYfür jedes Ereignis vorhanden sind. Sie können also Folgendes tun:

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

Sie können auch einen Abschluss verwenden, um Ihrem gesamten Code Zugriff auf eine Variable zu gewähren, die von einem Mousemove-Handler aktualisiert wird:

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

// do something with mouseX and mouseY
einsamer Tag
quelle
Ein Problem dabei ist, dass Sie beim Ziehen in Firefox nicht pageX und pageY oder clientX und clientY haben ... Gibt es eine Möglichkeit, pageY beim Ziehen zu erhalten?
JamesTBennett
11

Ich habe diese Methode verwendet:

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

Auf diese Weise habe ich immer den Abstand von oben in y und den Abstand von links in x gespeichert.

Nicu Criste
quelle
6

Darüber hinaus werden mousemoveEreignisse nicht ausgelöst, wenn Sie Drag & Drop über ein Browserfenster ausführen. Um die Mauskoordinaten während des Drag'n'Drop zu verfolgen, sollten Sie den Handler für das document.ondragoverEreignis anhängen und die Eigenschaft originalEvent verwenden.

Beispiel:

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

Verwendung window.event- es enthält letzte eventund wie jeder evententhält pageX, pageYusw. Arbeiten für Chrome, Safari, IE , aber nicht FF.

Oleksandr Tsurika
quelle
0
var CurrentMouseXPostion;
var CurrentMouseYPostion;

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

Erstellen Sie einen eventListener für das Hauptobjekt, in meinem Fall das Dokumentobjekt, um die Mauskoordinaten für jeden Frame abzurufen und in globalen Variablen zu speichern. Auf diese Weise können Sie Maus-Y & Z lesen, wann immer Sie möchten, wo immer Sie möchten.

Ala Mouhamed
quelle
-1

Ich bin darauf gestoßen, aber es wäre schön zu teilen ...

Was denkt ihr?

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

und boom, da haben wir es ..

Ande Caleb
quelle