2014-12-20 27 views
1
function start() { 
var work = document.getElementById("work").value; 
var rest = document.getElementById("rest").value; 
var rounds = document.getElementById("rounds"); 
var timer = document.getElementById("timer"); 

function countdown() { 
    var roundsValue = rounds.value; 
    while (roundsValue > 0) { 
     var worktime = setInterval(function() { 
      timer.value = work + "sec"; 
      work = work - 1; 
      if (work === 0) { 
       clearInterval(worktime); 
      } 
     }, 1000); 

     var resttime = setInterval(function(){ 
      timer.value = rest + "sec"; 
      rest = rest-1; 
      if(rest === 0){ 
       clearInterval(resttime); 
      } 
     }, 1000); 

     roundsValue = roundsValue-1; 
    } 
} 

}不能在while循環中實現一個函數嗎?

我現在的工作對我的javascript進展,我來到這裏這個問題。我想重複相同數量的工作時間和休息時間,因爲輪次是這樣,但它不能像這樣工作,我不能幫助自己。例如:8輪10秒的工作,然後5秒的休息。它可能無法正常工作,因爲函數不能在WHILE循環中實現。

小提琴:http://jsfiddle.net/shhyq02e/4/

+0

您可以單獨創建此功能,可以調用循環中的作用。 – Vatsal

+1

您可以在循環內創建函數,但請注意它們將在每個步驟重新創建,因此更好地在循環外創建一次。你的代碼似乎不工作,因爲你永遠不會調用'倒計時'功能。 – Oriol

+0

你的代碼有很多錯誤,你需要調用倒數函數,roundValue應該是一個整數,用於比較roundsValue> 0,時間事件是異步的,所以這兩個事件將重合 – sahilbathla

回答

0

這裏是速戰速決,可能不會去了解它的最佳方式,但會去做些什麼。

http://jsfiddle.net/sahilbatla/shhyq02e/6/

function start() { 

    var rounds = document.getElementById("rounds"); 
    var timer = document.getElementById("timer"); 
    var roundsValue = parseInt(rounds.value); 

    (function countdown() { 
     var work = document.getElementById("work").value; 
     var rest = document.getElementById("rest").value; 
     if (roundsValue > 0) { 
      var worktime = setInterval(function() { 
       timer.value = work + "sec(work)"; 
       work = work - 1; 
       if (work === 0) { 
        clearInterval(worktime); 
        var resttime = setInterval(function() { 
         timer.value = rest + "sec(rest)"; 
         rest = rest - 1; 
         if (rest === 0) { 
         clearInterval(resttime); 
         --roundsValue; 
         countdown(); 
         } 
        }, 1000); 
       } 
      }, 1000); 
     } 
    })(); 
}