2013-05-16 262 views
1

我想在JavaScript中運行一個計時器30秒鐘,播放一個嘟嘟的.WAV文件,然後計數10秒並再次發出嗶聲。我希望重複此操作,直到所需的時間點擊或用戶介入並單擊停止按鈕。如何啓動和停止多個JavaScript計時器?

這是怎麼了,我實現它:

function startWorkOut(param) { 

     if (param === 1) { 
      setTimeout(playBeep, 30000); //30 second workout 
     } 
     else if (param === 0) { 
      setTimeout(playBeep, 10000); //10 second rest 
     } 
     return; 
} 

function playBeep() { 

     beep.play(); //already loaded above this snippet 

     i++; //simple switch for going back and forth between 30 & 10 secs 
     if (i % 2 === 1) { 
      startWorkOut(0); 
     } 
     else startWorkOut(1); 

     return;  

} 

的問題是我不知道如何阻止它。因爲這兩個函數是互相調用的,所以我需要知道如何進行某種手動的休息。

回答

7

它分配給一個變量

var beepTimer = setTimeout(playBeep, 30000); //30 second workout 

clearTimeout(beepTimer); // This will clear that timer 
+1

3和1秒我認爲你的意思'clearTimeout' –

+0

啊。對..我的壞 –

+0

我可能會誤解,但運行clearTimeout沒有意義嗎?我認爲setTimeout的全部重點是運行一次,而不是setInterval。 beepTimer只會在該函數的範圍內,對嗎? – armadadrive

0

嘗試此;

var timerConst; 
    function startWorkOut(param) { 

      if (param === 1) { 
       timerConst = setTimeout(playBeep, 30000); //30 second workout 
      } 
      else if (param === 0) { 
       timerConst = setTimeout(playBeep, 10000); //10 second rest 
      } 
      return; 
    } 

    function playBeep() { 

      beep.play(); //already loaded above this snippet 

      i++; //simple switch for going back and forth between 30 & 10 secs 
      if (i % 2 === 1) { 
       startWorkOut(0); 
      } 
      else startWorkOut(1); 

      return;  

    } 

    function stop(){ 
      clearTimeout(timerConst); 
    } 
+0

由於timerConst處於不同的功能,TimerConst是否超出範圍? – armadadrive

+0

對不起,我沒有注意到你在全球範圍內宣佈它。 – armadadrive

0

存儲參考由的setTimeout的setInterval方法返回,然後使用window.clearTimeout或window.clearInterval消除這些定時器。例如:

var ref1 = window.setTimeout(function() {your code}, 5000); 
var ref2 = window.setInterval(function() {your code}, 5000); 

一個然後用下面的代碼刪除:

window.clearTimeout(ref1); 
window.clearInterval(ref2); 

希望它能幫助。

+2

有沒有必要使用窗口對象 –

+0

clearTimeout和clearInterval是窗口對象的例程。這些功能之前,您不能指定窗口。不過要清楚,我認爲我們必須寫下他們的前綴。 –

0

jsFiddle Demo

「我想再次運行在JavaScript中的計時器30秒,播放蜂鳴.WAV文件,再算上10秒,播放提示音。我想這是重複,直到期望的時間被擊中或用戶干預並點擊停止按鈕。「

計時器是爲了簡潔

var playing;//variable for timer 
function startWorkOut(){ 
var entry = playing === void 0;//true if playing is undefined 
var interval = entry? 3000 : 1000;//first entry is 3s timer, others are 1s 
if(!entry)playBeep();//play a beep except when the workout timer is first started 
playing = setTimeout(startWorkOut,interval);//play a beep in either 3s or 1s 
} 

function stopWorkOut(){ 
clearTimeout(playing);//stops timer 
playing = undefined;//restores variable state 
}