2015-09-11 22 views
1

定時器,啓動/暫停按鈕和重置按鈕均按預期工作。重置後的JavaScript定時器不啓動

它似乎有的唯一的錯誤是,當我運行計時器並重置它時, 將不會再次啓動。只有在按下開始/暫停按鈕2次後,它纔會再次運行。

現場演示:http://codepen.io/Michel85/full/pjjpYY/

代碼:

var timerTime; 
var time = 1500; 
var currentTime; 
var flag = 0; 
var calculateTime 

// Start your Timer 
function startTimer(time) { 
     document.getElementById("btnUp").disabled = true; 
     document.getElementById("btnDwn").disabled = true; 
     timerTime = setInterval(function(){ 
     showTimer(); 
     return flag = 1; 
    }, 1000); 
} 

// Reset function 
function resetTimer(){ 
    clearInterval(timerTime); 
    document.getElementById('showTime').innerHTML=(calculateTime(1500)); 
    document.getElementById("btnUp").disabled = false; 
    document.getElementById("btnDwn").disabled = false; 
    return time=1500; 
} 

// Pause function 
function pauseTimer(){ 
    clearInterval(timerTime); 
    currentTime = time; 
    document.getElementById('showTime').innerHTML=(calculateTime(time)); 
    return flag = 0; 
} 

// Update field with timer information 
function showTimer(){ 
    document.getElementById("showTime").innerHTML=(calculateTime(time)); 
    flag = 1; 
    if(time < 1){ 
     resetTimer(); 
    } 
    time--; 
}; 

// Toggle function (Pause/Run) 
function toggleTimmer(){ 
    if(flag == 1){ 
     pauseTimer(); 
    } else { 
     startTimer(); 
    } 
} 
/* 
    Round-time up or down 
*/ 

// Set timer Up 
function timeUp(){ 
    time += 60; 
    document.getElementById("showTime").innerHTML=(calculateTime(time)); 
    return time; 
} 

// Set timer Down 
function timeDown(){ 
    if(time > 60){ 
     time-=60; 
    } 
    document.getElementById("showTime").innerHTML=(calculateTime(time)); 
    return time; 
} 

/* 
    Break-time up down 
*/ 
// Set timer Up 
function breakUp(){ 
    time += 60; 
    document.getElementById("showTime").innerHTML=(calculateTime(time)); 
    return time; 
} 

// Set timer Down 
function breakDown(){ 
    if(time > 60){ 
     time-=60; 
    } 
    document.getElementById("showTime").innerHTML=(calculateTime(time)); 

    return time; 
} 

// Calculate the Days, Hours, Minutes, seconds and present them in a digital way. 
function calculateTime(totalTime) { 

    // calculate days 
    var days = Math.floor(totalTime/86400); 
    totalTime = totalTime % 86400 

    // calculate hours 
    var hours = Math.floor(totalTime/3600); 
    totalTime = totalTime % 3600; 

    // calculate minutes 
    var minutes = Math.floor(totalTime/60); 
    totalTime = totalTime % 60; 

    // calculate seconds 
    var seconds = Math.floor(totalTime); 

    function convertTime(t) { 
     return (t < 10 ? "0" : "") + t; 
    } 

    // assign the variables 
    days = convertTime(days); 
    hours = convertTime(hours); 
    minutes = convertTime(minutes); 
    seconds = convertTime(seconds); 

    // Make sure the "00:" is present if empty. 
    if(days !== "00"){ 
     var currentTimeString = days + ":" + hours + ":" + minutes + ":" + seconds; 
     return currentTimeString; 
    } else if (hours !== "00"){ 
     var currentTimeString = hours + ":" + minutes + ":" + seconds; 
     return currentTimeString 
    } else if(minutes !== "0:00"){ 
     var currentTimeString = minutes + ":" + seconds; 
     return currentTimeString 
    } else { 
     var currentTimeString = seconds; 
     return currentTimeString 
    } 
} 

任何幫助是值得歡迎的。 在此先感謝。

映入眼簾, 米歇爾

+0

你能爲你的代碼創建jsfiddle嗎? –

+0

** flag = 0; **在resetTimer函數中 –

+0

親愛的Muhammad Usman,非常感謝您的評論!正如Barmar建議的那樣。這是訣竅。謝謝! Greets Michel –

回答

1

resetTimer需要設置flag0。如果它將其設置爲1,則toggleTimer將調用pauseTimer而不是startTimer

順便說一句,使用布爾值(true/false)作爲標誌更好。

+0

親愛的Barmar,謝謝! 在仔細閱讀我的代碼和您的評論之後,這一切都是有道理的。我的代碼現在完美。謝謝。歡迎Michel –

0

只要刪除clearInterval(timerTime);在函數resetTimer();

function resetTimer() { 
    //clearInterval(timerTime); 
    document.getElementById('showTime').innerHTML = (calculateTime(300)); 
    document.getElementById("btnUp").disabled = false; 
    document.getElementById("btnDwn").disabled = false; 
    return time = 300; 
} 
+0

親愛的Adisak Anusornsrirung,感謝您的評論。正如Barmar所建議的,我已經選擇添加一個標誌。這是訣竅。歡迎米歇爾 –