Die Position der Maus wird auf dem eventObjekt angezeigt mousemove, das von einem Handler für das Ereignis empfangen wurde und das Sie an das Fenster anhängen können (die Ereignisblasen):
(function() {
document.onmousemove = handleMouseMove;
function handleMouseMove(event) {
var eventDoc, doc, body;
event = event || window.event; // IE-ism
// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}
// Use event.pageX / event.pageY here
}
})();
(Beachten Sie, dass der Hauptteil davon ifnur 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:
(function() {
var mousePos;
document.onmousemove = handleMouseMove;
setInterval(getMousePosition, 100); // setInterval repeats every X ms
function handleMouseMove(event) {
var dot, eventDoc, doc, body, pageX, pageY;
event = event || window.event; // IE-ism
// If pageX/Y aren't available and clientX/Y are,
// calculate pageX/Y - logic taken from jQuery.
// (This is to support old IE)
if (event.pageX == null && event.clientX != null) {
eventDoc = (event.target && event.target.ownerDocument) || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0 );
}
mousePos = {
x: event.pageX,
y: event.pageY
};
}
function getMousePosition() {
var pos = mousePos;
if (!pos) {
// We haven't seen any movement yet
}
else {
// Use pos.x and pos.y
}
}
})();
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.
eventObjekt gibt, wenn die Funktion zum zweiten Mal aufgerufen wird. Sie sollten sich wahrscheinlich ein Ereignis anhören, als es zu verwendensetTimeout.