2013-07-16 57 views
5

函数showRandom每1000毫秒执行一次,但是我希望它每隔random毫秒执行一次。有没有解决方案?谢谢!如何每次使用随机数毫秒的setInterval?

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

DEMO:jsFiddle

+4

使用'setTimeout',而不是'setInterval'。 https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout –

+0

谢谢Felix – smotru

+1

@FelixKling:我已经让我的答案成为CW了,因为这真的是你的答案,我只是把它OP可以接受的地方。 :-)(我知道你不在乎,事实上我确定没有人在乎我,但它感觉不对,另外两个社区也是如此:-)) –

回答

4

费利克斯说:如果你想每次来改变时间间隔,使用setTimeout来代替。简单的例子,因为我正好有你想你的原始代码做以下烦恼:

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

谢谢!我需要随机使用以后才能成为全球使用者。 – smotru

+0

@smotru:上面继续使用全球。 (在'random'前面没有'var')。 –

1
setInterval(function() { 
//your code to be executed every random miliseconds 
} ,random_interval()); 


var random_interval=function(){ 
return Math.random()*1000; 
} 
0

如果你愿意,你可以使用setTimeout的,而不是一个随机时间间隔。这里有一个例子给你一个想法(没有测试可能包含错误):

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

}

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

0

由于使用setTimeoutsetInterval(fn,PERIOD)实现如下:

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

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

+0

感谢您的输入,因为这是一个3年前的帖子,我甚至不记得我用过这个。但是既然我们回到了这个话题,请告诉我迭代* PERIOD是随机的? – smotru