2015-06-22 243 views
1

我正在寻找一种方法来改变我的javascript数字计数器的工作方式。现在它每秒都会计数,但我希望它在1秒到15秒之间的随机时间内进行计数。将间隔时间更改为随机?

function startCount(){ 
    timer = setInterval (count, 1000); 
} 

function count(){ 
    var el = document.getElementById('counter'); 
    var currentNumber = parseFloat(removeCommas(el.innerHTML)); 
    el.innerHTML = addCommas(currentNumber+1); 
} 

function addCommas(nStr){ 
    nStr += ''; 
    x = nStr.split('.'); 
    x1 = x[0]; 
    x2 = x.length > 1 ? '.' + x[1] : ''; 
    var rgx = /(\d+)(\d{3})/; 

    while (rgx.test(x1)) { 
     x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
    } 

    return x1 + x2 + '.00'; 
} 

function removeCommas(aNum){ 
    //remove any commas 
    aNum=aNum.replace(/,/g,""); 

    //remove any spaces 
    aNum=aNum.replace(/\s/g,""); 

    return aNum; 
} 

有人可以帮助我将计数时间更改为随机数吗?

+2

你想要一个随机但固定的时间间隔,还是应该每个新的超时时间都是随机的? –

回答

1

假设间隔在1到15秒之间,并在每个间隔后更改。 setIntervsal()不适合。 setTimeout()在这里是一个不错的选择,因为等待的时间间隔。每隔下一个时间间隔都会有新的时间等待,并且必须再次调用。随机等待时间通过Math.random()实现,该函数返回0到1之间的浮点数。使用因子并强制为整数并填充1000毫秒,我们得到所需的间隔。

(A字前一种方案:首先,我以为只是一个固定的随机时间间隔将满足,但问题ariesed,要求什么样的区间)。

function startCount() { 
    setTimeout(count, 1000 + Math.random() * 14000 | 0); 
} 
function count() { 
    var el = document.getElementById('counter'); 
    var currentNumber = parseFloat(removeCommas(el.innerHTML)); 
    el.innerHTML = addCommas(currentNumber + 1); 
    startCount(); 
} 
+0

我确定OP(和其他读者)赞赏你所作修改的解释。 –

+0

谢谢,你也知道如何改变el.innerHTML = addCommas(currentNumber + 1);到一个随机数 - 例如250到1500之间? – dwayneE

+0

'250 + Math.random()* 1250 | 0“是250的固定部分并且0 ... 1250的随机值被强制为整数。 –

0

使用setTimeout插件使用随机时间参数在startCount()中输入setInterval,并在count函数结束时调用它。

function startCount() 
{ 
    timer = setTimeout (count, Math.floor(Math.random() * 14000) + 1000); 
} 


function count() 
{ 
    var el = document.getElementById('counter'); 
    var currentNumber = parseFloat(removeCommas(el.innerHTML)); 
    el.innerHTML = addCommas(currentNumber+1); 
    startCount() 
}