Javascript 设定间隔时间

Javascript 设定间隔时间,javascript,setinterval,duration,Javascript,Setinterval,Duration,我创建了一个简单的函数,可以在3秒内将值从0计算到某个值。 以下是小提琴和音乐片段: var number=document.querySelector('.number'); var button=document.querySelector('button'); addEventListener('click',function(){ 计数(数字2500); }) 函数计数(元素、值){ var计数=0; var timerId=setInterval(函数(){ 如果(++计数==值)c

我创建了一个简单的函数,可以在3秒内将值从0计算到某个值。

以下是小提琴和音乐片段:

var number=document.querySelector('.number');
var button=document.querySelector('button');
addEventListener('click',function(){
计数(数字2500);
})
函数计数(元素、值){
var计数=0;
var timerId=setInterval(函数(){
如果(++计数==值)clearInterval(timerId);
elem.innerHTML=计数;
},3000元/价值);
}
0

Go
计时器的最小间隔取决于HTML5规范(最初是在现已失效的计时器规范中),以防止计时器触发过快。当计时器调度计时器时(这基本上是
setInterval
所做的),一旦嵌套达到5,如果请求的计时器间隔<4ms,则设置为4ms:

  • 如果嵌套级别大于5,并且超时时间小于4,则将超时时间增加到4
  • 因为你告诉它每次定时器启动时按1计数,并且它很快只会每4毫秒(最多)启动一次,所以需要4*2500=10000毫秒(10秒)才能完成

    您可以在下面更新的代码段中看到此平均延迟,它将计数器替换为回调之间的平均时间:

    如果(!Date.now){
    Date.now=函数(){
    返回+新日期();
    };
    }
    变量编号=document.querySelector('.number');
    var button=document.querySelector('button');
    var总和=0;
    var last=null;
    addEventListener('click',function(){
    计数(数字2500);
    })
    函数计数(元素、值){
    var计数=0;
    last=日期。现在();
    var timerId=setInterval(函数(){
    var now=Date.now();
    总和+=现在-最后一次;
    最后=现在;
    如果(++计数==值)clearInterval(timerId);
    elem.innerHTML=总和/计数;
    },3000元/价值);
    }
    0
    
    Go
    有一个由
    setTimeout
    setInterval
    强制执行的最小延迟。从

    延迟超过规定时间的原因

    嵌套超时强制>=4ms

    历史上,浏览器实现setTimeout()“钳制”:延迟小于“最小延迟”限制的连续setTimeout()调用被强制至少使用最小延迟。最小延迟DOM_MIN_TIMEOUT_值为4ms(存储在Firefox中的首选项中:DOM.MIN_TIMEOUT_值),DOM_钳制_TIMEOUT_嵌套级别为5

    事实上,4ms是由HTML5规范指定的,并且在2010年及以后发布的浏览器中是一致的。在(Firefox 5.0/Thunderbird 5.0/SeaMonkey 2.2)之前,嵌套超时的最小超时值为10毫秒


    因此,即使您将
    3000/2500=1.2
    指定为间隔时间,它的作用就像您使用
    4
    作为间隔时间一样。

    ++count
    ?这是有效的JavaScript吗?@yuriy636是-从技术上讲,
    setTimeout
    /
    setInterval
    函数不会在您给定的超时时间内运行某些内容,而是将其安排在指定的时间内运行。不同之处在于,由于JS是单线程的,所以可能已经在处理其他东西,因此超时/间隔会被放在queue@Miloshio
    querySelector
    不返回HTML集合,它只返回一个DOM节点。@T.J.Crowder我明白了,这绝对足够简短和准确。谢谢你的提示,我一定会宣传的:)