마우스의 위치는 이벤트 event핸들러에 의해 수신 된 객체 에 대해보고 mousemove되며, 윈도우에 부착 할 수 있습니다 (이벤트 버블).
(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
}
})();
(그 본문은 if이전 IE에서만 실행됩니다.)
위의 실제 예 -마우스를 페이지 위로 드래그하면 점이 그려집니다. (IE8, IE11, Firefox 30, Chrome 38에서 테스트되었습니다.)
실제로 타이머 기반 솔루션이 필요한 경우이를 상태 변수와 결합하십시오.
(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
}
}
})();
내가 아는 한, 이벤트를 보지 않으면 마우스 위치를 얻을 수 없습니다. 다른 스택 오버플로 질문에 대한 대답 은 확인하는 것 같습니다.
참고 : 100ms (10 회 / 초)마다 무언가를 할 경우 해당 기능에서 수행하는 실제 처리를 매우 제한적으로 유지하십시오 . 브라우저, 특히 오래된 Microsoft 브라우저에서는 많은 작업이 필요합니다. 예, 최신 컴퓨터에서는별로 좋아 보이지 않지만 브라우저에는 많은 일이 발생합니다. 예를 들어, 처리 한 마지막 위치를 추적하고 해당 위치가 없을 경우 처리기에서 즉시 구제 할 수 있습니다. t가 변경되었습니다.
event함수가 두 번째로 호출 될 때 객체 가 없다는 것 입니다. 아마도 use보다 일부 이벤트를 들어야합니다setTimeout.