таймер обратного отсчета не работает JavaScript - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь запустить этот таймер обратного отсчета, но он не работает, пожалуйста, помогите мне, я пытаюсь сгенерировать случайное число между двумя числами и таймером запуска, но он работает, пожалуйста, помогите мне

  String.prototype.toHHMMSS = function () {
     var sec_num = parseInt(this, 10); // don't forget the second parm
     var hours = Math.floor(sec_num / 3600);
     var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
     var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours < 10) {
        hours = "0" + hours;
    }
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (seconds < 10) {
        seconds = "0" + seconds;
    }
    var time = hours + ':' + minutes + ':' + seconds;
    return time;
}

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

var count = getRandomArbitrary(21000,23000);

var counter = setInterval(timer, 1000);

function timer() {


    console.log(count);

    if (parseInt(count) <= 0) {
        clearInterval(counter);
        return;
    }
    var temp = count.toHHMMSS();
    count = (parseInt(count) - 1).toString();

    $('#timer').html(temp);
}

HTML code

<div id="timer"></div>

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Попробуйте мой код.

Ваша проблема с кодом состоит в том, что вы не конвертировали count.toHHMMSS(); эту строку в строку при вызове.

String.prototype.toHHMMSS = function () {
     var sec_num = parseInt(this, 10); // don't forget the second parm
     var hours = Math.floor(sec_num / 3600);
     var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
     var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours < 10) {
        hours = "0" + hours;
    }
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (seconds < 10) {
        seconds = "0" + seconds;
    }
    var time = hours + ':' + minutes + ':' + seconds;
    return time;
}

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

var count = getRandomArbitrary(21000,23000);

var counter = setInterval(timer, 1000);

function timer() {


    console.log(count);

    if (parseInt(count) <= 0) {
        clearInterval(counter);
        return;
    }
    var temp = count.toString().toHHMMSS();
    count = (parseInt(count) - 1).toString();

    $('#timer').html(temp);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<div id="timer"></div>
0 голосов
/ 28 ноября 2018

Вы расширили прототип строки с помощью функции преобразования, но не используете строку (count - это число из метода getRandom...).Вместо этого используйте обычную функцию, и она будет работать с другими типами:

toHHMMSS = function (str) {
     var sec_num = parseInt(str, 10); // don't forget the second parm
     var hours = Math.floor(sec_num / 3600);
     var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
     var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours < 10) {
        hours = "0" + hours;
    }
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (seconds < 10) {
        seconds = "0" + seconds;
    }
    var time = hours + ':' + minutes + ':' + seconds;
    return time;
}

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

var count = getRandomArbitrary(21000,23000);

var counter = setInterval(timer, 1000);

function timer() {


    console.log(count);

    if (parseInt(count) <= 0) {
        clearInterval(counter);
        return;
    }
    var temp = toHHMMSS(count);
    count = (parseInt(count) - 1).toString();

    $('#timer').html(temp);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="timer"></div>
...