【问题标题】:How to use setInterval with random number of milliseconds each time?如何每次使用随机毫秒数的 setInterval?
【发布时间】:2013-07-14 19:48:26
【问题描述】:

函数 showRandom 每 1000 毫秒执行一次,但我希望它每 random 毫秒执行一次.. 有什么解决方案吗?谢谢!

var random = 1000;
setInterval(function() {random = randomizator(60000,200000);} ,1000);
setInterval(function() {showRandom(random);}, random);
function randomizator(a,b)
{
    return Math.floor(Math.random()*b) + a;
}
function showRandom(random)
{
    $('#test').text(random);
}

演示:jsFiddle

【问题讨论】:

  • 使用setTimeout 而不是setIntervaldeveloper.mozilla.org/en-US/docs/Web/API/window.setTimeout
  • @FelixKling:我的答案是 CW,因为这真的是你的答案,我只是把它放在 OP 可以接受的地方。 :-) (我知道你不在乎,事实上我敢肯定除了我之外没有人在乎。但感觉不对。此外,两个人组成了一个社区。:-))
  • @T.J.Crowder:你不必这样做,但我很感激你的好意:)(耶,社区!)

标签: javascript random setinterval


【解决方案1】:

由于setInterval(fn,PERIOD)使用setTimeout的实现是:

     setTimeout(fn,iteration*PERIOD)  // iteration ∈ [1,2,3...,n]

所以,你需要使用setTimeout,随机化iteration*PERIOD

【讨论】:

  • 感谢您的意见,因为这是一篇 3 年前的帖子,我什至不记得我用它做什么了。但是既然我们回到这个话题,请告诉我迭代 * PERIOD 是如何随机的?
【解决方案2】:

如果你想要一个随机间隔,你可以使用 setTimeout 代替。下面是一个给你一个想法的例子(未测试可能包含错误):

function setRandomInterval(){
//Add your code here
setTimeout(function(){
  setRandomInterval();
}, Math.random()*1000);

}

setInterval 的问题是,一旦你设置了它,时间间隔就固定了。您可以停止间隔并开始一个新的间隔,但 setTimeout 将是更好的解决方案。

【讨论】:

    【解决方案3】:
        setInterval(function() {
    //your code to be executed every random miliseconds
    } ,random_interval());
    
    
    var random_interval=function(){
    return Math.random()*1000;
    }
    

    【讨论】:

    • 不起作用。这会选择一个随机间隔,每次都使用相同的间隔。
    【解决方案4】:

    Felix 说过:如果要每次都更改间隔,请改用setTimeout。简化示例,因为我无法完全按照您希望原始代码执行的操作:

    doTheRandom();
    function doTheRandom() {
        random = randomizator(60000,200000);
        // Up to 1 second
        setTimeout(doTheRandom, randomizator(1000, 2000)); // 1-2 seconds
    }
    

    【讨论】:

    • 谢谢!我需要将随机数设为全局以供以后使用。
    • @smotru:以上继续使用全局。 (random前面没有var。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2019-08-13
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多