JavaScript计时器,无法正常工作

时间:2018-06-28 00:41:18

标签: javascript

你好,我有一个计时器,既显示分钟又显示秒,当它低于1分钟时(例如约40秒),它开始出现故障,它仍在正确计时,但不时显示一些其他数字,例如27> 26 > 25比一小会儿,您可以看到例如34,并且计数> 24> 23等,但是这些数字之间是多少?如何删除它们,最好是检查代码。

<div class="container">
    <p id="time"></p><br>
    <button onclick='timer()'>Start Kviz</button>
</div>

<script>

function timer() {
    var min = '01m';
    var sec = 30;
    var timer = setInterval(function () {
        document.getElementById('time').innerHTML = '00d' + ' ' + 
         '00h' + ' ' + min + ' ' + sec + 's';
        sec--;


        if (sec === 0) {
            min = '00m';
        }

        if (min === '00m') {
            sec = 59;
            timer = setInterval(function () {

                document.getElementById('time').innerHTML = '00d' + 
              '00h' + min + sec + 's';
                sec--;


                if (sec < 0) {
                    alert ('Time is up!');
                    clearInterval(timer);
                }
            }, 1000);
        }
    }, 1000);
}
</script>

1 个答案:

答案 0 :(得分:0)

您忘记在以下代码段中清除间隔:

          if (min === '00m') {
            sec = 59;
            clearInterval(timer);
            timer = setInterval(function () {

另外,请清除警报消息之前的时间间隔,如下所示:

            if (sec < 0) {
                clearInterval(timer);
                alert ('Time is up!'); 
            }

最后的代码段如下:

<div class="container">
    <p id="time"></p><br>
    <button onclick='timer()'>Start Kviz</button>
</div>

<script>

function timer() {
    var min = '01m';
    var sec = 30;
    var timer = setInterval(function () {
        document.getElementById('time').innerHTML = '00d' + ' ' + 
         '00h' + ' ' + min + ' ' + sec + 's';
        sec--;


        if (sec === 0) {
            min = '00m';
        }

        if (min === '00m') {
            sec = 59;
            clearInterval(timer);
            timer = setInterval(function () {

                document.getElementById('time').innerHTML = '00d' + 
              '00h' + min + sec + 's';
                sec--;


                if (sec < 0) {
                    clearInterval(timer);
                    alert ('Time is up!'); 
                }
            }, 1000);
        }
    }, 1000);
}
</script>