【问题标题】:JavaScript timer doesn't start after being resetJavaScript 计时器在重置后不启动
【发布时间】:2015-12-07 22:51:34
【问题描述】:

计时器、开始/暂停按钮和重置按钮都按预期工作。

它似乎唯一的错误是,当我运行计时器并重置它时,它 不会再开始了。只有在我按下“开始/暂停”按钮 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
    }
}

欢迎任何帮助。 提前致谢。

您好, 米歇尔

【问题讨论】:

  • 你能为你的代码创建jsfiddle吗?
  • flag = 0; 在 resetTimer 函数中
  • 亲爱的 Muhammad Usman, 非常感谢您的评论!正如 Barmar 所建议的那样。这可以解决问题。谢谢!问候米歇尔

标签: javascript timer reset countdowntimer


【解决方案1】:

resetTimer 需要将flag 设置为0。如果将其设置为1,则toggleTimer 将调用pauseTimer 而不是startTimer

顺便说一句,对标志使用布尔值 (true/false) 更好。

【讨论】:

  • 亲爱的巴尔玛,谢谢!在回顾了我的代码和你的评论之后,一切都说得通了。我的代码现在完美运行。谢谢你。问候米歇尔
【解决方案2】:

只需删除 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;
}

【讨论】:

  • 亲爱的 Adisak Anusornsrirung,感谢您的评论。根据 Barmar 的建议,我选择添加一个标志。这可以解决问题。问候米歇尔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多