2014-04-26 104 views
0


對於決定回答這個問題的人,我突然遇到了一個小問題。
我嘗試做以下:Javascript set/clearInterval assist

創建

var intrvl; //for interval 
function strt() { 
    //and set interval 
    intrvl = setInterval(writeT,3000); 
} 
function writeT() { 
    //do something here as the interval runs 
    checkIf(); //check for the mouse down 
} 
function checkIf() { 
    //here goes the code that checks if mouse is down and if it is 
    //then I call another function that begins other useful process 
    //I tried 
    if (c.addEventListener('click')) { //c is my canvas 
      clearInterval(intrvl); //guess clearing the interval yee? 
      //and then calling the function I want to call 
      startDoing(); 
    } 
} 

我要等待,直到有人點擊畫布上使用間隔,然後運行所需的功能。
但是,無論何時點擊畫布,函數startDoing()都會運行,但與運行它相比,運行速度太快而沒有這一切。
如何讓它工作?正如我想要的那樣,首先創建的時間間隔不存在,只有startDoing()運行。

回答

1

你誤解了addEventListener()的使用。

您的checkIf()中的情況正在立即返回。因此,你的代碼是

  1. 上調用strt()
  2. 早在間隔定時器增加點擊處理程序啓動間隔定時是首次
  3. 流逝而且它會立即停止間隔時間ER和調用startDoing()然後。

使用它一樣,而不是:

var intrvl; 
var clicked = false; 

function strt() { 
    //and set interval 
    intrvl = setInterval(checkIf,3000); 
} 

function checkIf() { 
    if (clicked) { 
     clearInterval(intrvl); 
     startDoing(); 
    } 
} 

c.addEventListener('click', function() { 
    clicked = true; 
}); 

這個碼立即註冊點擊處理。只要調用strt(),它就會啓動間隔計時器。一旦鼠標被點擊,被點擊的變量被設置爲真以標記該事件。下一次您的間隔計時器觸發時,它會識別先前的點擊,因爲檢查該變量並啓動您想要啓動的任何內容。