Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每次复位定时器都会越来越快_Javascript_Jquery_Timer_Settimeout_Cleartimeout - Fatal编程技术网

Javascript 每次复位定时器都会越来越快

Javascript 每次复位定时器都会越来越快,javascript,jquery,timer,settimeout,cleartimeout,Javascript,Jquery,Timer,Settimeout,Cleartimeout,每次我重置计时器时,它都会越来越快。我想我需要使用clearTimeout,但不确定如何实现它。代码如下: $(function(){ sessionmin = 25; $("#sessionMinutes").html(sessionmin); $("#circle").click(function() { timeInSeconds = sessionmin * 60; timeout(); }); }) function timeout(){ se

每次我重置计时器时,它都会越来越快。我想我需要使用
clearTimeout
,但不确定如何实现它。代码如下:

$(function(){
  sessionmin = 25;
  $("#sessionMinutes").html(sessionmin);
  $("#circle").click(function() {  
    timeInSeconds = sessionmin * 60;
    timeout();
  });
})

function timeout(){
  setTimeout(function () {
    if (timeInSeconds > 0) {
      timeInSeconds -= 1;
      hours = Math.floor(timeInSeconds/3600);
      minutes = Math.floor((timeInSeconds - hours*3600)/60);
      seconds = Math.floor(timeInSeconds - hours*3600 - minutes*60);
      $("#timer").html(hours + ":" + minutes + ":" + seconds);
    }
    timeout();
  }, 1000);
}

您应该:使用
setInterval
而不是
setTimeout
,返回
setInterval
生成的间隔id,在重新启动之前清除该间隔。以下是一个例子:


您必须将
setTimeout
定义为一个变量来重置它


每次单击时,都会添加一个新的自调用超时
$(function(){
        var sessionmin = 25;
        var intervalId = null;
        $("#sessionMinutes").html(sessionmin);
        $("#circle").click(function() {  
            timeInSeconds = sessionmin * 60;
            // clear the current interval so your code isn't running multiple times
            clearInterval(intervalId);
            // restart the timer
            intervalId = run();
        });
 })

function run(){
    return setInterval(function () {
        if(timeInSeconds>0){
            timeInSeconds-=1;
            hours = Math.floor(timeInSeconds/3600);
            minutes = Math.floor((timeInSeconds - hours)/60);
            seconds = (timeInSeconds - hours*3600 - minutes*60)
            $("#timer").html(hours + ":" + minutes + ":" + seconds);
        }
    }, 1000);
}
var thisTimer;      // Variable declaration.
$(function(){
        sessionmin = 25;
        $("#sessionMinutes").html(sessionmin);
        $("#circle").click(function(){  
            clearTimeout(thisTimer);        // Clear previous timeout
            timeInSeconds = sessionmin * 60;
            timeout();
        });
 })

function timeout(){
    thisTimer = setTimeout(function () {    // define a timeout into a variable
        if(timeInSeconds>0){
        timeInSeconds-=1;
        hours = Math.floor(timeInSeconds/3600);
        minutes = Math.floor((timeInSeconds - hours)/60);
        seconds = (timeInSeconds - hours*3600 - minutes*60)
        $("#timer").html(hours + ":" + minutes + ":" + seconds);
        }
    timeout();
    }, 1000);
}