在一定时间内随机添加到一定数量

时间:2014-02-20 20:45:15

标签: javascript jquery

我需要帮助处理我在JavaScript / jQuery中使用的东西

我想给出一个设定的'目的地'号码,并给它一个设定的持续时间,然后让它在整个持续时间内以1为间隔加总(不是等间隔,但不是在开始时全部,结束或中间),但是在一段时间内达到“目的地”号码已经结束。

所以,如果我设置20秒的持续时间,并且'目的地'号码为10.它将启动计时器,并以1为间隔(无图案)随机添加,并且持续时间同时结束添加最后一个数字。

我真的很困惑,不知道从哪里开始。

非常感谢任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

我的方法是:

  1. 将持续时间除以相等的部分(每个增量一个,从0开始,以完整持续时间结束)
  2. 随机化延迟,但保持相同的总和。如果向一个延迟添加一些随机值,则从延迟间隔中减去相同的数量。
  3. 致电window.setTimeout并延迟所有延误。给它一个函数,将当前值递增1。
  4. 代码:

    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]);
    }
    

    以下是demo fiddle,您可以尝试一下。