2013-03-19 40 views
9
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; 
} 

ja chcąc uruchomić kod, podczas gdy mysz jest w dół, nie mogę znaleźć nic do zaproponowania mogę zrobić while (mouseDown) więc już Próbowalismy podejmowania flagę mousedown który jest reset na myszy jednak uważam, że pętla while jest tym, co powoduje, że mam utknąć w nieskończonej pętli.JavaScript podczas mousedown

Jakieś rady, które pomogą ci w tym, co próbuję osiągnąć?

Odpowiedz

10

Trzeba powołać się na aktywność w mousedown jakiś rozsądny okres. Chciałbym to zrobić:

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); 
+0

Czy mogę zapytać, dlaczego -1 jest stosowane jako apposed na 0? – Larry

+0

Nie jestem pewien, czy identyfikator 0 może istnieć - i używam '-1' dla wartości' null'. W javascript możesz bezpośrednio ustawić 'mousedownID = null' i zapytać' if (mousedownID === null) '(sprawdzając typ danych z' === 'na pewno). –

+1

@ TomášZato Btw, niekoniecznie musisz przetestować dla 'null' przed wywołaniem' clearInterval() '. Podobnie jak w ['clearTimeout()'] (https://developer.mozilla.org/en-US/docs/DOM/window.clearTimeout#Notes): "* Podanie nieprawidłowego identyfikatora [...] nie ma żadnych efekt (i nie rzuca wyjątku). * "Chociaż te metody nie są w rzeczywistości wystandaryzowane, to prawie wszystkie obecne implementacje następują po tym. –

5

Nie można tego zrobić, ponieważ czynność musi kończyć się przed innym przypadku jest przetwarzany, ale można powtarzalnie wywołać funkcję aż myszy znajduje się:

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

Można również zadeklarować 'timer' w zakresie zewnętrznym, jak PO robi z' mdflag' i przesunąć 'mouseup' zdarzenie z' mousedown' więc nieprawdaż” Kontynuacja dodawania kolejnych. –

+0

Czy myślisz, co się stanie, jeśli przyciśniesz przycisk i opuścisz okno? –

+0

@ JonathanLonowski Masz rację. Edytowałem. –

Powiązane problemy