javascript - 如何在问答游戏中使用clearInterval() 清除计时器?

标签 javascript jquery html

我已经在这款问答游戏上工作了一段时间了,但我似乎无法关闭这些计时器,我已经用尽了所有资源来寻找清除计时器的解决方案。

这是 html:


<div class="game-wrapper"></div>
<div id="container">
  <h1>Trivia Game</h1>
  <div class="card">
    <div id="time">Time Left: <span id="timer"></span></div>
    <div id="question"></div>
    <div id="answers">
      <button id="optionA"></button>
      <button id="optionB"></button>
      <button id="optionC"></button>
      <button id="optionD"></button>
    </div>
  </div>
</div>

这是js:


var time     = 20;
var timeLeft = $('#timer');
var interval;

function timerRun() {
  var interval = setInterval(function () {
    time--;
    $(timeLeft).text(time);
    console.log(time);
    if (time === 0) {
      unanswered++;
      $('#unanswered').text(unanswered);
      resetTime();
      renderQuestion();
    }
  }, 1000);
}

function stopTimers() {
  clearInterval(interval);
}

function resetTime() {
  stopTimers();
  time = 20;
  $(timeLeft).text(time);
}

function startAnswers() {
  $(optionA).on('click', function () {
    console.log('this is the correct button');
    console.log('this button is being clicked A');
    correct++;
    $('#correct').text(correct);
    $('#optionA').addClass('correct-button');
    $('#optionA').removeClass('correct-button');
    renderQuestion();
    resetTime();
    timerRun();
  });
  $(optionB).on('click', function () {
    console.log('wrong button');
    console.log('this button is being clicked B');
    incorrect++;
    $('#incorrect').text(incorrect);
    $('#optionB').addClass('incorrect-button');
    $('#optionB').removeClass('incorrect-button');
    renderQuestion();
    resetTime();
    timerRun();
  });
  $(optionC).on('click', function () {
    console.log('wrong button 2');
    console.log('this button is being clicked C');
    incorrect++;
    $('#incorrect').text(incorrect);
    $('#optionC').addClass('incorrect-button');
    $('#optionC').removeClass('incorrect-button');
    renderQuestion();
    resetTime();
    timerRun();
  });
  $(optionD).on('click', function () {
    console.log('wrong button 3');
    console.log('this button is being clicked D');
    incorrect++;
    $('#incorrect').text(incorrect);
    $('#optionD').addClass('incorrect-button');
    $('#optionD').removeClass('incorrect-button');
    renderQuestion();
    resetTime();
    timerRun();
  });
}

上面我尝试用一​​个函数清除我的间隔,但每次我单击按钮时计时器仍然是

最佳答案

您的问题在这一行:

var interval = setInterval(function () { ...

删除“var”即可工作,因为它的设置方式是使用局部变量,而不是clearInterval() 使用的全局范围。

关于javascript - 如何在问答游戏中使用clearInterval() 清除计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382660/

相关文章:

html - 无法向图像添加填充

javascript - React - 遍历数组和事件

javascript - NodeJS 在 4 或 5 小时后变慢

javascript - 声明 jQuery 变量的官方正确方法是什么?

javascript - 如何在Jquery中的点击事件期间停止滚动

javascript - 需要使用 mootools 来编写简单的脚本而不是 jquery...怎么样?

html - Bootstrap 流体布局问题中的底部对齐网格元素

css - Dreamweaver CC 无法识别 html5 选择器

javascript - Grunt phpcs 多个任务不运行

javascript - 如何检测页面刚刚从 jquery 中的页面缓存(例如,从“后退”按钮)恢复?