2013-03-19 46 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; 
} 

ederken ben yapabilirim önermek için bir şey bulamıyorum, fare kapalı iken kod çalıştırmasına isteyen yerken (mousedown) bu yüzden fare üzerinde sıfırlanır mousedown için bir bayrak yapma uğraş ettik Ancak ben ne kadar sürdüğüme inancım sonsuz bir döngüde sıkışıp kalmamı sağlayan şeydir.JavaScript mousedown

Ne zahmetli olmaya çalıştığım konusunda yardımcı olacak bir öneri var mı?

cevap

10

makul bir aralık. Bunu yapardım:

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

Neden -1'in 0 olarak kullanıldığını sorabilir miyim? – Larry

+0

0 id id adının mevcut olup olmadığından emin değilim - "null" değerleri için '-1' kullanıyorum. Javascript'te 'mousedownID = null' komutunu doğrudan ayarlayabilir ve' if (mousedownID === null) 'komutunu sorabilirsiniz. –

+1

@ TomášZato Btw, mutlaka clearInterval() 'i çağırmadan önce 'null' için sınamak zorunda değilsiniz. ['ClearTimeout()'] ile olduğu gibi (https://developer.mozilla.org/en-US/docs/DOM/window.clearTimeout#Notes): "* Geçersiz bir kimlik geçirme [...] etkisi (ve bir istisna atar). * "Bu yöntemler aslında standartlaştırılmasa da, neredeyse tüm geçerli uygulamalar bunu takip eder. –

5

başka olaydan önce sona ermelidir sizin işlev işlenirken Bunu, yapamaz, ancak fare olana kadar hkr bir işlev diyebiliriz: You mousedown aktiviteye çağırmak zorunda

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

Ayrıca OP mdflag' 'ile yaptığını olarak, dış kapsamında' timer' beyan ve dışarı 'mouseup' olay hareket olabilir' mousedown' o değil mi bu yüzden Daha fazlasını eklemeyi sürdürüyorum. –

+0

Düğmeye bastığımda ve pencereden ayrılırsam ne olacağını düşündünüz mü? –

+0

@JonathanLonowski Haklısınız. Düzenledim. –