javascript - 计时器在每次重置时都变得越来越快

标签 javascript jquery timer settimeout cleartimeout

每次我重置它时,计时器都会越来越快。我在想我需要使用 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);
}

最佳答案

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

See Fiddle

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);
}

关于javascript - 计时器在每次重置时都变得越来越快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38669808/

相关文章:

javascript - 尝试在 JS 和 HTML 中进行能量体积转换,得到 0

javascript - 如何使用jquery将鼠标悬停在url地址栏上时禁用光标

jquery - 使用 jquery 抓取使用 ajax 创建的元素

javascript - jquery 升级中的 jquery .live 到 .on

java - 使用计时器在 Java 中创建通用任务

javascript - 获取 URL 以从 iFrame 打开更大的 map ?

javascript - 哪个 JavaScript 框架可以搜索 CSS 样式表规则并编辑它们的属性?

javascript - 如何检测网络摄像头的宽度和高度?

java - 如何在java中点击按钮时使用计时器

java - java定时器可以运行得更快吗?