it-swarm.com.de

Wie bekomme ich die Mausposition in jQuery ohne Mausereignisse?

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

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

weil ich nur die Position erhalten und die Informationen verarbeiten muss

92
Martin Vseticka

Ich glaube nicht, dass es eine Möglichkeit gibt, query die Mausposition zu bestimmen, aber Sie können einen mousemove -Handler verwenden, der nur die Informationen entfernt, sodass 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 jeder Code außer setTimeout Code 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 ...

144
T.J. Crowder

Sie können die Mausposition in jQuery nicht lesen, ohne ein Ereignis zu verwenden. Beachten Sie zunächst, dass die event.pageX und event.pageY properties ist in jedem Fall vorhanden. Sie können also Folgendes tun:

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

Sie können auch einen Closure 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
26
lonesomeday

Ich habe diese Methode benutzt:

$(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 wird immer der Abstand von oben in y und der Abstand von links in x gespeichert.

10
Nicu Criste

Darüber hinaus werden mousemove Ereignisse nicht ausgelöst, wenn Sie Drag'n'Drop über ein Browserfenster ausführen. Um die Mauskoordinaten während des Drag & Drop zu verfolgen, sollten Sie einen Handler für das Ereignis document.ondragover Anhängen und dessen originalEvent-Eigenschaft verwenden.

Beispiel:

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

verwenden window.event - enthält das letzte event und wie jedes event enthält pageX, pageY usw. Funktioniert für Chrome, Safari, IE aber nicht FF.

2