Случайное добавление в течение определенного времени к определенному номеру

0

Мне нужна помощь с чем-то, над чем я работаю в JavaScript/jQuery

Я хотел бы дать номер набора "назначение" и дать ему заданную продолжительность и иметь его таким образом, чтобы он складывался с интервалом 1 случайным образом на протяжении всей продолжительности (неравномерно, но не все в начале, в конце или в середине), но достижение номера "назначения" по продолжительности времени увеличивается.

Таким образом, если я установил продолжительность 20 секунд и номер "назначения" 10. Он запустит таймер и случайным образом добавит интервалы в 1 (без шаблона), а продолжительность будет завершена одновременно с последним номер добавлен.

Я действительно застрял в этом, и не знаю, с чего начать.

Любая помощь вообще была бы оценена, спасибо много!

  • 0
    Показ некоторого кода поможет.
Теги:

1 ответ

0

Мой подход:

  1. Разделите продолжительность на равные части (по одному для каждого приращения, начиная с 0, заканчивая полной продолжительностью)
  2. Рандомизируйте задержки, но сохраните ту же сумму. Если вы добавите какое-то случайное значение к одному задержке, то вычтите ту же сумму из интервала задержки.
  3. Вызовите window.setTimeout со всеми задержками. Дайте ему функцию, которая увеличивает текущее значение на единицу.

Код:

var start = parseInt($("#inStart").val(), 10),
    end = parseInt($("#inEnd").val(), 10),
    duration = parseInt($("#inDuration").val(), 10),
    difference = end - start,
    current = start - 1,
    step = duration * 1000 / difference,
    delays = [],
    index, amount, 
    increment = function () {
        current += 1;
        $("#outCurrent").text(current);
    };
// calculate equal delays
for (index = 0; index <= difference; index++) {
    delays.push(step * index);
}
// randomize delays, without changing the sum 
for (index = 1; index < delays.length - 2; index++) {
    amount = (Math.random() - 0.5) * step;
    delays[index] -= amount;
    delays[index+1] += amount;
}
// schedule the increment calls
for (index = 0; index < delays.length; index++) {
    window.setTimeout(increment, delays[index]);
}

Вот демонстрационная скрипка, вы можете попробовать ее.

  • 0
    Некоторый ответ был бы хорош.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню