setInterval触发太频繁(Javascript)

setInterval触发太频繁(Javascript),javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我一直在尝试为一个简单的倒计时计时器编写代码,我正在为一个网站制作倒计时计时器。请看这里:sbtimescore.github.io。不幸的是,我遇到了一个逻辑错误,我有限的知识无法解决我是个新手。当反复按下启动/暂停按钮时,计时器开始加速。我已经发布了运行onclick的代码,如下所示: function spGameClock() { if (gameClockRunning == false) { gameClockRunning = true; } else {

我一直在尝试为一个简单的倒计时计时器编写代码,我正在为一个网站制作倒计时计时器。请看这里:sbtimescore.github.io。不幸的是,我遇到了一个逻辑错误,我有限的知识无法解决我是个新手。当反复按下启动/暂停按钮时,计时器开始加速。我已经发布了运行onclick的代码,如下所示:

function spGameClock() {
  if (gameClockRunning == false) {
    gameClockRunning = true;
  } else {
    gameClockRunning = false;
    return;
  }

  function timer() {
    if (gameCounter == 0) {
      clearInterval(interval);
      $("#GameClockText").html(secondsToText(gameCounter));
      blinkIt("GameClockBox");
    } else if (gameCounter > 0 && gameClockRunning == true) {
      $("#GameClockText").html(secondsToText(gameCounter));
      gameCounter = gameCounter - 1;
    } else if (gameCounter > 0 && gameClockRunning == false) {
      clearInterval(interval);
    } else {}
  }

  var interval = setInterval(timer, 1000);
}
我知道间隔被调用的次数太多,但我不确定如何修复它。如果有人有解决办法,我将不胜感激

应将间隔定义为spGameClock函数之外的变量。jqueryready回调中有一个很好的位置。然后还可以使用该变量本身来确定时钟是否在滴答滴答地响

下面是一个使用countdownjs的实现:

$function{ var interval=null,//在spGameClock作用域之外定义 gameCounter=10;//一些初始值 功能时钟{ //使用间隔作为检测: 如果间隔==null{ 间隔=设置间隔计时器,1000; $GameClockText.textsSecondsTotextGameCounter; }否则{ 清晰间隔; interval=null;//清除后始终设置为null $GameClockText.textsSecondStotextGameCounter+暂停; } 功能计时器{ 配子计数器; $GameClockText.textsSecondsTotextGameCounter; //这里不需要测试空值的间隔,因为它肯定不是空值。
如果gameCounter不担心blinkIt函数或secondsToText函数;这些函数调用js document.spGameClock中其他函数的次数会不止一次?看起来每次单击按钮都会创建另一个intervalIs gameClockRunning global?您是否考虑过将其更改为使用setTimeout并仅永久保存如果条件仍然需要超时循环,则停止超时循环?下行投票者是否可以善意地解释问题所在?不是我,而是可能建议使用全局变量,尽管disclaimer@trincot我们需要在封装函数中定义整个内容,这有什么原因吗?只有在脚本不在f body标记:如果放在别处,那么当脚本试图访问某些元素时,它们可能尚未加载。只有在文档准备就绪时才会执行对$的回调。其次,它为变量(如interval)提供了一个闭包:否则,您必须将它们声明为全局变量,这可能不是最好的选择粘连。