2011-08-05 33 views
24

我想知道如何实现: 随机数后产生一个随机数。并重用它。Randomize setInterval(如何在随机间隔后重写相同的随机数)

function doSomething(){ 
    // ... do something..... 
} 

var rand = 300; // initial rand time 

i = setinterval(function(){ 

    doSomething(); 
    rand = Math.round(Math.random()*(3000-500))+500; // generate new time (between 3sec and 500"s) 

}, rand); 

然后反复做。

到目前为止,我能够生成一个随机的时间间隔,但它一直持续到页面刷新(生成的时间间隔不同)。

感谢

回答

68

这是一个很干净,清晰的方式来做到这一点:

http://jsfiddle.net/Akkuma/9GyyA/

function doSomething() {} 

(function loop() { 
    var rand = Math.round(Math.random() * (3000 - 500)) + 500; 
    setTimeout(function() { 
      doSomething(); 
      loop(); 
    }, rand); 
}()); 

编辑:

说明: 循环只存在于立即调用的函数上下文中,因此它可以递归调用自身。

+0

完美!我喜欢它。 – Timmerz

+1

不错的解决方案,但是如果你想能够在一段时间内删除“间隔”,它需要一些改变。 –

+2

@toprightgamedev如果你想停止循环,只需用你需要的逻辑在setTimeout周围放置一条if语句即可。 – Akkuma

4

像这样的东西应该工作 - 用setTimeout()代替你可以每次设定一个新的随机值:

function doSomething() { 
    alert("doing something"); 
} 

function init() { 
    var myFunction = function() { 
     doSomething(); 
     var rand = Math.round(Math.random() * (3000 - 500)) + 500; // generate new time (between 3sec and 500"s) 
     setTimeout(myFunction, rand); 
    } 
    myFunction(); 
} 

$(function() { 
    init(); 
}); 

Working jsFiddle here

+0

@roXon:是的 - 那样你可以每次更新随机间隔 – BrokenGlass

+0

这是最后的jQuery,不是纯Javascript。 – felwithe

4

只需设置间隔您兰特每次(和第一清除它)

function doSomething(){ 
    // ... do something..... 
} 

var i; 
var rand = 300; 

function randomize() { 
    doSomething(); 
    rand = Math.round(Math.random()*(3000-500))+500; 
    clearInterval(i); 
    i = setInterval('randomize();', rand); 
} 

i = setInterval('randomize();', rand); 

,或者尝试使用的setTimeout(和randing后重新设置)

+1

在旁边注意它应该'setInterval(randomize,rand);' –

1

只是扔我的帽子环

var keepLooping = true; 
    (function ontimeout(){ 
     if(keepLooping){ 
      doTheAction(); 
      setTimeout(ontimeout, Math.random() * 100); 
     } 
    })(); 

取决于如果你想要把doTheAction()setTimeout回调与否里面。我认为把它放在/之前是很好的。如果你想要最初的延迟,然后把它放在里面,如果没有,简单地放在外面。