La posición del mouse se informa sobre el eventobjeto recibido por un controlador para el mousemoveevento, que puede adjuntar a la ventana (el evento burbujea):
(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
}
})();
(Tenga en cuenta que el cuerpo de eso ifsolo se ejecutará en IE antiguo).
Ejemplo de lo anterior en acción : dibuja puntos mientras arrastra el mouse sobre la página. (Probado en IE8, IE11, Firefox 30, Chrome 38.)
Si realmente necesita una solución basada en temporizador, combine esto con algunas variables de estado:
(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
}
}
})();
Hasta donde sé, no puede obtener la posición del mouse sin haber visto un evento, algo que esta respuesta a otra pregunta de Stack Overflow parece confirmar.
Nota al margen : si va a hacer algo cada 100 ms (10 veces / segundo), intente mantener el procesamiento real que realiza en esa función muy, muy limitado . Eso es mucho trabajo para el navegador, particularmente los más antiguos de Microsoft. Sí, en las computadoras modernas no parece mucho, pero están sucediendo muchas cosas en los navegadores ... Entonces, por ejemplo, puede realizar un seguimiento de la última posición que procesó y abandonar el controlador inmediatamente si la posición no ha cambiado. t cambiado.
eventobjeto cuando se llame a la función por segunda vez. Probablemente deberías escuchar algún evento que usarsetTimeout.