Javascript 如何实现在给定持续时间内计数的计数器?

Javascript 如何实现在给定持续时间内计数的计数器?,javascript,counter,setinterval,Javascript,Counter,Setinterval,我想实现一个计数器,它在给定的持续时间内计数。如果我想在一秒钟内数到100,那么每次计数之间的间隔应该是10毫秒,因此当它被数到100时,它就变成了1秒。对于1000,每次计数之间的间隔应为1ms 我尝试过使用setInterval,并根据我想要计数的数字动态更改计数器的延迟,但是setInterval有一个问题,它没有按预期工作。除了使用setInterval,我如何在JavaScript中实现这个计数器。先谢谢你 const btn=document.querySelector('butt

我想实现一个计数器,它在给定的持续时间内计数。如果我想在一秒钟内数到100,那么每次计数之间的间隔应该是10毫秒,因此当它被数到100时,它就变成了1秒。对于1000,每次计数之间的间隔应为1ms

我尝试过使用setInterval,并根据我想要计数的数字动态更改计数器的延迟,但是setInterval有一个问题,它没有按预期工作。除了使用setInterval,我如何在JavaScript中实现这个计数器。先谢谢你

const btn=document.querySelector('button');
const counter1=document.querySelector('.counter1');
const counter2=document.querySelector('.counter2');
btn.addEventListener('单击',()=>{
增量(100,计数器1);
增量(1000,计数器2);
})
常量增量=(n,计数器)=>{
设m=0;
设时间=1000/n;
设置间隔(()=>{
if(m
。计数器容器{
显示器:flex;
}
.柜台{
利润率:10px;
文本对齐:居中;
}
钮扣{
左边距:80px;
};

计数器1

100

柜台2

1000

开始
setInterval()
setTimeout()
在计时方面实际上并不可靠。我将结合使用javascript的
Date.now()
,它返回自浏览器/os运行以来的毫秒数。所以你可以这样做:w

const btn=document.querySelector('button');
const counter1=document.querySelector('.counter1');
const counter2=document.querySelector('.counter2');
btn.addEventListener('单击',()=>{
增量(100,计数器1);
增量(1000,计数器2);
})
常量增量=(n,计数器,长度=1000)=>{
让我们开始=Date.now()
让结束=开始+长度
设间隔=长度/n;
设置间隔(()=>{
时间=日期。现在()
如果(时间<结束){
计数=(时间-开始)/间隔
counter.textContent=计数;
}否则{
counter.textContent=n;
clearInterval(本)
};
},间隔时间为1/2);
};
。计数器容器{
显示器:flex;
}
.柜台{
利润率:10px;
文本对齐:居中;
}
钮扣{
左边距:80px;
};

计数器1

100

柜台2

1000


开始
可能要阅读此帖子:。基本上,你不会得到一个在ms级别工作得非常好的计数器。但是如果你要这样做,比如说,n=10和n=100,它们将同时结束。当间隔(长度/n)不是1时,计数值也将是一个分数。此外,当setInterval不准确时,向其添加相同的间隔将导致计数不稳定。您可以通过更改为不同的数字来查看不稳定性。我们可以为此设置一个下限值,以避免更改数字时出现不稳定性:
Math.floor((time-start)/interval)