JavaScript во время mousedown

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;
}

Я хочу запустить код, пока мышь не работает, я не могу найти ничего, чтобы предложить, что я могу сделать, пока (mousedown), поэтому я попытался сделать флаг для mousedown, который сбрасывается на мышь, однако я верю, что цикл while-это то, что заставляет меня застрять в бесконечном цикле.

любой совет, чтобы помочь с тем, что я пытаюсь достичь?

2 ответов


вы должны вызвать действие mousedown в некоторый разумный интервал. Я бы сделал так:

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)
});