Posisi mouse dilaporkan pada event
objek yang diterima oleh pawang untuk mousemove
acara tersebut, yang dapat Anda lampirkan ke jendela (gelembung acara):
(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
}
})();
(Perhatikan bahwa tubuh itu if
hanya akan berjalan di IE lama.)
Contoh tindakan di atas - ia menarik titik saat Anda menyeret mouse ke halaman. (Diuji pada IE8, IE11, Firefox 30, Chrome 38.)
Jika Anda benar-benar membutuhkan solusi berbasis waktu, Anda menggabungkan ini dengan beberapa variabel status:
(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
}
}
})();
Sejauh yang saya ketahui, Anda tidak bisa mendapatkan posisi mouse tanpa melihat suatu peristiwa, sesuatu yang sepertinya dikonfirmasi oleh jawaban atas pertanyaan Stack Overflow ini .
Catatan : Jika Anda akan melakukan sesuatu setiap 100 ms (10 kali / detik), cobalah untuk menjaga proses aktual yang Anda lakukan dalam fungsi itu sangat, sangat terbatas . Itu banyak pekerjaan untuk browser, terutama yang lebih lama Microsoft. Ya, pada komputer modern sepertinya tidak banyak, tetapi ada banyak hal yang terjadi di browser ... Jadi misalnya, Anda dapat melacak posisi terakhir yang Anda proses dan segera menebus jaminan dari pawang jika posisinya belum t berubah.
event
objek saat fungsi dipanggil untuk kedua kalinya. Anda mungkin harus mendengarkan acara daripada menggunakansetTimeout
.