ตำแหน่งของเมาส์ถูกรายงานบน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
}
}
})();
เท่าที่ฉันทราบคุณไม่สามารถรับตำแหน่งเมาส์โดยไม่ได้เห็นเหตุการณ์ซึ่งเป็นคำตอบสำหรับคำถาม Stack Overflow อื่นที่ดูเหมือนว่าจะยืนยัน
หมายเหตุด้านข้าง : หากคุณกำลังจะทำทุก ๆ 100ms (10 ครั้ง / วินาที) ให้พยายามประมวลผลที่แท้จริงที่คุณทำในฟังก์ชั่นนั้น จำกัด มากจำกัด นั่นเป็นงานจำนวนมากสำหรับเบราว์เซอร์โดยเฉพาะอย่างยิ่ง Microsoft ที่เก่ากว่า ใช่ในคอมพิวเตอร์สมัยใหม่ดูเหมือนว่าจะไม่มากนัก แต่มีเบราว์เซอร์เกิดขึ้นมากมาย ... ตัวอย่างเช่นคุณอาจติดตามตำแหน่งสุดท้ายที่คุณดำเนินการและประกันตัวจากผู้จัดการทันทีหากตำแหน่งมี ' เปลี่ยนไปแล้ว
eventวัตถุเมื่อเรียกใช้ฟังก์ชันเป็นครั้งที่สองsetTimeoutคุณอาจจะฟังเหตุการณ์บางอย่างกว่าการใช้