jQuery计数器启动/停止/重置未正确停止

时间:2019-03-13 11:11:55

标签: javascript jquery html

我正在尝试使用setInterval()构建jQuery计数器,这个想法是一旦按下一个按钮,计数器应该开始计数,如果按下另一个按钮,则应该停止+重置为零,这个过程应该是可重复,但是即使我的变量集显示false,我的JS似乎也没有停止计时器。计时器仅在为true时计数。

$('.start').click(function() {
      timer(true)
    })

    $('.stop').click(function() {
      timer(false)
    })

    let timerShouldCount = false

    function timer(timerStatus) {
      timerShouldCount = timerStatus
      if (timerShouldCount == true ) {
        setInterval(function(){
          console.log('counting');
        }, 1000);
      }
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="start" type="button">Start</button>
        <button class="stop" type="button">Stop</button>

更新

$('.js_ask-later').click(function() {
        timer(true)
      })
      $('.js_close-modal').click(function() {
        timer(false)
      })

      let registerTimer
      let timerShouldCount = false

      function timer(timerStatus) {
        timerShouldCount = timerStatus
        if (timerShouldCount == true) {
          $('#login-modal').on('hidden.bs.modal', function (e) {
            registerTimer = setInterval(function(){
              $('#login-modal').modal('show')
            }, 5000)
          })
        } else {
          clearInterval(registerTimer)
        }
      }

1 个答案:

答案 0 :(得分:2)

您不会在任何时候清除间隔。为此,您需要参考创建的间隔。

let my_int;

function timer(timerStatus) {
    timerShouldCount = timerStatus
    if (timerShouldCount == true ) {
        my_int = setInterval(function(){
            console.log('counting');
        }, 1000);
    } else
        clearInterval(my_int);
}

[编辑]

根据下面的评论,很明显您实际上没有计时器,只是一个间隔。我们需要一个用于计时器的变量。

let my_int, timer = 0;

function timer(timerStatus) {
    timerShouldCount = timerStatus
    if (timerShouldCount == true ) {
        my_int = setInterval(function(){
            timer++; //<-- increment
            console.log('counting');
        }, 1000);
    } else {
        clearInterval(my_int);
        timer = 0; //<-- reset to 0
    }
}

您可以使用该计时器执行操作,即在DOM中显示该计时器的方法取决于您,但现在至少您可以看到我们如何将其递增并将其重置为0。