मैंने निम्नलिखित जावास्क्रिप्ट कोड लिखे हैं। मैं इसका उपयोग यह पता लगाने के लिए कर रहा हूं कि माउस कब चल रहा है और जब यह बंद हो गया है। MouseStopped() फ़ंक्शन सैकड़ों आइटमों का एक लूप है जो मुझे बताएगा कि माउस कहां रुक गया है, इसलिए मैं इसे केवल कॉल करना चाहता हूं जब माउस बंद हो गया हो।माउस को कब बंद किया गया है इसका पता लगाने के लिए
var CheckMovement;
var stopLoop = false;
var n = 0;
canvas.addEventListener('mousemove', function (evt) {
CheckMovement = setInterval(function() { HasMouseStopped(evt) }, 250);
}, false)
function HasMouseStopped(evt) {
var mousePos = getMousePos(canvas, evt);
newMouseX = mousePos.x;
newMouseY = mousePos.y;
if ((newMouseX !== mouseX) && (newMouseY !== mouseY)) {
stopLoop = true;
} else {
//stopped moving
clearInterval(CheckMovement);
stopLoop = false;
n = 0;
MouseStopped();
}
mouseX = newMouseX;
mouseY = mousePos.y;
}
function MouseStopped() {
while (arr.length > n) {
if (stopLoop) { break; }
if (ctx.isPointInPath(mouseX, mouseY)) {
//tooltip text
ctx.font = '12pt Candara';
ctx.fillStyle = 'black';
ctx.fillText(arr[n], mouseX + 10, mouseY - 5);
break;
}
n++;
}
}
अब मैं निम्नलिखित समस्या है:
- हालांकि मैं
clearInterval(CheckMovement)
बोल रहा हूँ, यह रोक-बार दोहराना नहीं करता है, यह लगातार चल रहा है, जिससे की समस्याMouseStopped()
कई बार कॉल कर रही है। यह क्यों नहीं रोक रहा है? - यदि मैं इसे लूप पूरा करने से पहले माउस ले जाया गया है तो मैं अपने ऑपरेशन के बीच
MouseStopped()
तोड़ना चाहता हूं। यही कारण है कि मैंstopLoop = true;
सेट कर रहा हूं हालांकि, यह भी इरादे के रूप में काम नहीं कर रहा है। मैं इन्हें कैसे प्राप्त कर सकता हूं?
धन्यवाद।
संपादन
आपके पास एक लूप के अंदर एक परीक्षण है जिसे लूप चल रहा है, जबकि सत्य पर सेट नहीं किया जा सकता है ... 'जबकि (arr.length> n) {if (stopLoop) {break; } '- आपके माउस स्टॉपप्ड को भी सेटटाइमआउट या इंटरवल को इंटरप्टेबल करने के लिए उपयोग करना होगा – mplungjan
सबसे पहले, परिभाषित करें कि जब माउस को रोका जाता है ... क्या यह 3 सेकंड या 3 मिलियन के लिए निष्क्रिय है, तो एक दूसरे से काफी अधिक प्रभावित होगा। दूसरा, माउस चाल पर एक अंतराल फ़ंक्शन सेट करें, पिछले और वर्तमान माउस स्थान की तुलना करें जब तक कि वे आपके अंतराल फ़ंक्शन से मेल नहीं खाते और रोकें –
अंतर्दृष्टि के लिए –