Saya telah menulis kode JavaScript berikut. Saya menggunakannya untuk mendeteksi kapan mouse bergerak dan kapan berhenti. Fungsi MouseStopped() adalah perulangan ratusan item yang akan memberi tahu saya di mana mouse berhenti, jadi saya ingin memanggilnya hanya ketika mouse telah berhenti.
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++;
}
}
Sekarang saya memiliki masalah berikut:
- Meskipun saya menelepon
clearInterval(CheckMovement)
, itu tidak berhenti mengulangi; itu berjalan terus menerus, yang menyebabkan masalah panggilanMouseStopped()
beberapa kali. Mengapa tidak berhenti? - Saya ingin mematahkan
MouseStopped()
di tengah operasinya jika mouse digerakkan sebelum menyelesaikan perulangannya. Inilah sebabnya saya menyetelstopLoop = true;
Namun, sepertinya hal itu juga tidak berfungsi sebagaimana mestinya. Bagaimana cara mencapainya?
Terima kasih.
EDIT
while (arr.length > n) { if (stopLoop) { break; }
- mouseStopped Anda juga harus menggunakan setTimeout atau interval agar dapat diinterupsi - person mplungjan   schedule 15.07.2013