Обратный отсчет случайных чисел до 0 в течение заданного времени - PullRequest
0 голосов
/ 21 февраля 2020

Я создаю обратный отсчет, который мне нужно отсчитать до 0, но в случайных числах.

Ex - обратный отсчет с 4 минут по секундам, но мне нужно показать значение между 300 до 390 обратного отсчета до 0 со случайными числами в течение выше 4 минут.

Я создал обратный отсчет случайных чисел, но все еще не могу понять, как нацелиться на то, чтобы стать равным 0 в течение заданного времени.

<script>
var count = 350; //this is a random value between(300-390)
var timer = setInterval(function() {
//this will generate number between 0 to 10 and reduce it from count randimly
    count -= Math.floor(Math.random()*9);
    //set it to html element
    jQuery('#maindvpart').html(count);

//when number become 0
    if( count <= 0) {
        jQuery('#maindvpart').html(0);
        count = 0;
        clearInterval(timer);
    }

//but i need to run this countdown within 4 minutes
//(so when 0 minutes ends above count should zero, until 0 it should count down from random number)

},1000);
</script>
<div id="maindvpart">&nbsp;</div>

у кого-нибудь есть идея или пример, как это сделать, спасибо вы

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Ваш "timer" работает каждую секунду. Когда вы делаете "count -= Math.floor(Math.random()*9);", это уменьшает значение переменной «count» намного быстрее, поэтому вы всегда достигнете "count <= 0" гораздо быстрее, чем за 4 минуты. Если вы хотите запустить таймер на 4 минуты, вам нужно запускать таймер в секунду - 240 раз и «отображать случайное число», но не вычитайте это случайное число из числа. Помогает ли это?

Редактирование на примере, в надежде, что оно укажет на вашу цель:

<script>
var count = 240; //4 minutes
var displayNumber = 350; //or whatever number you want to start with
var timer = setInterval(function() {
    //this will generate number between 0 to 10 and reduce it from displayNumber randomly
    displayNumber -= Math.floor(Math.random()*9);
    count--;
    console.log(displayNumber);

    // exit if either the display number is <= 0 or the time is up
    if( displayNumber <= 0 || count <= 0) {
        console.log(0);
        displayNumber = 0;
        clearInterval(timer);
    }
},1000);
</script>
1 голос
/ 21 февраля 2020

Решение 1:

просто измените временной интервал, после которого случайное число уменьшается на единичный шаг (ie: 1), чтобы указать шаг по времени, необходимый для случайного числа, равного 0, когда время вверх уравнение будет следующим: {задержка перед вычитанием 1 из ранда # (в се c) = время, прошедшее до того, как ранд # достигнет 0 (в се c) / ранд #}

пример:

1) rand # = 300, необходим для обратного отсчета до достижения 0 через 2 минуты (120se c), затем 300 необходимо для обратного отсчета 1 каждые 120/300 se c

var count = 300 // your randomly generated number; 
var time = 60 //time elapsed before the random number to equal 0;
var timer = setInterval(function() {
count = count -1;
console.log(count);
if( count <= 0) {
    count = 0;
    clearInterval(timer);
    }
},(time/count)*1000);

Решение 2:

изменить единичный шаг, на котором случайное число уменьшается каждую секунду, пока не достигнет 0 после истечения заданного времени. уравнение будет выглядеть следующим образом: {случайный # шаг уменьшения = ранд # / время, истекшее до тех пор, пока ранд # не достигнет 0 (как таковой c)}

ex:

1) ранд # = 300, необходимо считать до достижения 0 в 1 минуту (60 с c), затем 300 нужно считать до 300/60 каждый 1 с c

var count = 300 // your randomly generated number; 
var time = 20 //time elapsed before the random number to equal 0;
var decrementStep=count/time; 

var timer = setInterval(function() {
count = count - decrementStep;
console.log(count);
if( count <= 0) {
    count = 0;
    clearInterval(timer);
    }
},1000);
...