Ich hoffe, die Position des Mauszeigers periodisch alle t Sekunden zu verfolgen. Wenn also eine Seite geladen wird - dieser Tracker sollte starten und etwa 100 ms lang sollte ich den neuen Wert von posX und posY erhalten und ihn im Formular ausdrucken.
Ich habe den folgenden Code ausprobiert - aber die Werte werden nicht aktualisiert - nur die Anfangswerte von posX und posY werden in den Formularfeldern angezeigt. Irgendwelche Ideen, wie ich das zum Laufen bringen kann?
<html>
<head>
<title> Track Mouse </title>
<script type="text/javascript">
function mouse_position()
{
var e = window.event;
var posX = e.clientX;
var posY = e.clientY;
document.Form1.posx.value = posX;
document.Form1.posy.value = posY;
var t = setTimeout(mouse_position,100);
}
</script>
</head>
<body onload="mouse_position()">
<form name="Form1">
POSX: <input type="text" name="posx"><br>
POSY: <input type="text" name="posy"><br>
</form>
</body>
</html>
javascript
Hari
quelle
quelle
event
Objekt gibt, wenn die Funktion zum zweiten Mal aufgerufen wird. Sie sollten sich wahrscheinlich ein Ereignis anhören, als es zu verwendensetTimeout
.window.event
sein wirdundefined
odernull
. Wenn es kein Ereignis gibt, gibt es keinevent
Objekt.Antworten:
Die Position der Maus wird auf dem
event
Objekt angezeigtmousemove
, das von einem Handler für das Ereignis empfangen wurde und das Sie an das Fenster anhängen können (die Ereignisblasen):(Beachten Sie, dass der Hauptteil davon
if
nur auf dem alten IE ausgeführt wird.)Beispiel für das oben Genannte in Aktion - Es zeichnet Punkte, wenn Sie mit der Maus über die Seite ziehen. (Getestet auf IE8, IE11, Firefox 30, Chrome 38.)
Wenn Sie wirklich eine Timer-basierte Lösung benötigen, kombinieren Sie diese mit einigen Statusvariablen:
Soweit mir bekannt ist, können Sie die Mausposition nicht ermitteln, ohne ein Ereignis gesehen zu haben. Dies scheint diese Antwort auf eine andere Frage zum Stapelüberlauf zu bestätigen.
Randnotiz : Wenn Sie alle 100 ms (10 Mal / Sekunde) etwas tun, versuchen Sie, die tatsächliche Verarbeitung, die Sie in dieser Funktion ausführen, sehr, sehr begrenzt zu halten . Das ist eine Menge Arbeit für den Browser, insbesondere für ältere Microsoft-Browser. Ja, auf modernen Computern scheint es nicht viel zu sein, aber in Browsern ist viel los ... So können Sie beispielsweise die zuletzt verarbeitete Position verfolgen und sofort vom Handler abspringen, wenn die Position nicht vorhanden ist. t geändert.
quelle
Hier ist eine Lösung, die auf jQuery und einem Mausereignis-Listener (der weitaus besser ist als eine normale Abfrage) für den Körper basiert:
quelle
Öffnen Sie Ihre Konsole ( Ctrl+ Shift+ J), kopieren Sie den obigen Code und bewegen Sie die Maus im Browserfenster.
quelle
Ich glaube, dass wir das überdenken,
quelle
document.body.addEventListener("mousemove", function (e) {})
ist der Weg, dies zu tun, in Ihrem Javascript-Code im Gegensatz zu im HTMLWas ich denke, dass er nur die X / Y-Positionen des Cursors wissen möchte, als warum die Antwort so kompliziert ist.
quelle
ES6-basierter Code:
Wenn Sie zum Bewegen der Maus eine Drosselung benötigen, verwenden Sie diese:
Hier ist ein Beispiel
quelle
Unabhängig vom Browser haben die folgenden Zeilen für mich funktioniert, um die korrekte Mausposition abzurufen.
event.clientX - event.currentTarget.getBoundingClientRect().left event.clientY - event.currentTarget.getBoundingClientRect().top
quelle
Wenn Sie die Mausbewegung nur visuell verfolgen möchten:
quelle
Ich habe nicht genug Ruf, um eine Kommentarantwort zu posten, aber ich habe die ausgezeichnete Antwort von TJ Crowder genommen und den Code auf einem 100-ms-Timer vollständig definiert . (Er überließ einige Details der Fantasie.)
Danke OP für die Frage und TJ für die Antwort! Sie sind beide eine große Hilfe. Der Code ist unten als Spiegel von isbin eingebettet.
quelle
Hier ist eine Kombination der beiden Anforderungen: Verfolgen Sie die Mausposition alle 100 Millisekunden:
Diese Tracks & wirkt auf die Mausposition, aber nur alle Zeit Millisekunden.
quelle
Nur eine vereinfachte Version von @TJ Crowder und @RegarBoy .
Weniger ist meiner Meinung nach mehr.
Weitere Informationen zum Ereignis finden Sie unter onmousemove event.
Es gibt einen neuen Wert von
posX
undposY
jedes Mal, wenn sich die Maus entsprechend den horizontalen und vertikalen Koordinaten bewegt.quelle