Vị trí của chuột được báo cáo về eventđối tượng mà người xử lý nhận được cho mousemovesự kiện mà bạn có thể đính kèm vào cửa sổ (bong bóng sự kiện):
(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
}
})();
(Lưu ý rằng phần thân của nó ifsẽ chỉ chạy trên IE cũ.)
Ví dụ về hành động trên - nó vẽ các dấu chấm khi bạn kéo chuột trên trang. (Đã thử nghiệm trên IE8, IE11, Firefox 30, Chrome 38.)
Nếu bạn thực sự cần một giải pháp dựa trên bộ đếm thời gian, bạn kết hợp điều này với một số biến trạng thái:
(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
}
}
})();
Theo như tôi biết, bạn không thể có được vị trí chuột mà không thấy sự kiện, điều mà câu trả lời này cho câu hỏi Stack Overflow khác dường như xác nhận.
Lưu ý bên lề : Nếu bạn sẽ làm một cái gì đó cứ sau 100ms (10 lần / giây), hãy cố gắng giữ quá trình xử lý thực tế bạn làm trong chức năng đó rất, rất hạn chế . Đó là rất nhiều công việc cho trình duyệt, đặc biệt là những trình duyệt cũ của Microsoft. Vâng, trên các máy tính hiện đại có vẻ không nhiều, nhưng có rất nhiều thứ đang diễn ra trong các trình duyệt ... Vì vậy, ví dụ, bạn có thể theo dõi vị trí cuối cùng bạn đã xử lý và bảo lãnh ngay lập tức nếu vị trí đó không xảy ra ' t thay đổi.
eventđối tượng khi hàm được gọi lần thứ hai. Bạn có thể nên nghe một số sự kiện hơn sử dụngsetTimeout.