8
以下のJavaScriptコードを記述しました。私はマウスが動いているときとそれが止まったときを検出するために使っています。 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;
しかし、それも意図したとおりに動作していないようです。 これをどのように達成できますか?
ありがとうございます。
EDITS
ループが実行されている間はtrueに設定できないループ内でテストしています... while(arr.length> n){if(stopLoop){break; } ' - あなたのmouseStoppedは、割り込み可能にするためにsetTimeoutまたはintervalを使用する必要があります – mplungjan
最初に、マウスが停止したとみなされる時間を定義します... 3秒間非アクティブになっていますか?次に、マウスの移動時にインターバル機能を設定し、以前と現在のマウスの位置が一致するまで比較し、インターバル機能を停止します。 –
代わりにsetTimeoutを使用してください。 –