web-dev-qa-db-ja.com

マウスダウン中のJavaScript

var mdflag;
var count = 0;

document.addEventListener("mousedown",mdown,false);
    document.addEventListener("mouseup",mup,false);
}


function mdown()
{
    mdflag=true;
    while(mdflag)
    document.getElementById("testdiv").innerHTML = count++;

}
function mup()
{
    mdflag = false;
}

マウスが下がっている間にコードを実行したいのですが、while(mousedown)でできることを示唆するものが見つからないので、マウスを上にするとリセットされるmousedownのフラグを作成しようとしましたが、whileループが何であるかを信じています無限ループに陥ってしまいます。

私が達成しようとしていることを助けるためのアドバイスはありますか?

13
Larry

妥当な間隔でマウスダウンアクティビティを呼び出す必要があります。私はこれをします:

var mousedownID = -1;  //Global ID of mouse down interval
function mousedown(event) {
  if(mousedownID==-1)  //Prevent multimple loops!
     mousedownID = setInterval(whilemousedown, 100 /*execute every 100ms*/);


}
function mouseup(event) {
   if(mousedownID!=-1) {  //Only stop if exists
     clearInterval(mousedownID);
     mousedownID=-1;
   }

}
function whilemousedown() {
   /*here put your code*/
}
//Assign events
document.addEventListener("mousedown", mousedown);
document.addEventListener("mouseup", mouseup);
//Also clear the interval when user leaves the window with mouse
document.addEventListener("mouseout", mouseup);

別のイベントが処理される前に関数を終了する必要があるため、これを行うことはできませんが、マウスが上がるまで関数を繰り返し呼び出すことができます。

var timer;
document.addEventListener("mousedown", function(){
     timer=setInterval(function(){
          document.getElementById("testdiv").innerHTML = count++;
     }, 100); // the above code is executed every 100 ms
});
document.addEventListener("mouseup", function(){
    if (timer) clearInterval(timer)
});
5
drunken bot