घटना के 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जब दूसरी बार फ़ंक्शन को कॉल किया जाता है तो कोई वस्तु नहीं होगी । आपको शायद उपयोग की तुलना में किसी घटना को सुनना चाहिएsetTimeout।