我创建了一个简单的函数,该函数在3秒钟内将值从0计数到某个值。
这是小提琴-https: //jsfiddle.net/ar6akv5z/和代码段:
var number = document.querySelector('.number');
var button = document.querySelector('button');
button.addEventListener('click', function() {
counting(number, 2500);
})
function counting(elem, value) {
var count = 0;
var timerId = setInterval(function() {
if (++count == value) clearInterval(timerId);
elem.innerHTML = count;
}, 3000/value);
}
<span class="number">0</span>
<button>Go</button>
但是该功能的持续时间超过3秒。您能解释一下为什么会发生还是告诉我我的错误。
谢谢你,我的英语不好意思
计时器的最小间隔受HTML5规范(最初是在现已失效的计时器规范中)指定的算法的约束,以防止计时器触发得太快。当计时器安排计时器(本质上是setInterval
这样)时,一旦嵌套达到5个,如果请求的计时器间隔小于4毫秒,则将其设置为4毫秒:
- 如果嵌套级别大于5,并且超时小于4,则将超时增加到4。
由于您要告诉它每次定时器启动时都加1,并且它很快就会开始启动(每4毫秒一次)(最好),因此需要4 * 2500 = 10000毫秒(10秒)才能完成。
您可以在下面的更新代码段中看到该平均延迟,该平均延迟将计数器替换为两次回调之间的平均时间:
if (!Date.now) {
Date.now = function() {
return +new Date();
};
}
var number = document.querySelector('.number');
var button = document.querySelector('button');
var sum = 0;
var last = null;
button.addEventListener('click', function() {
counting(number, 2500);
})
function counting(elem, value) {
var count = 0;
last = Date.now();
var timerId = setInterval(function() {
var now = Date.now();
sum += now - last;
last = now;
if (++count == value) clearInterval(timerId);
elem.innerHTML = sum / count;
}, 3000/value);
}
<span class="number">0</span>
<button>Go</button>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句