【问题标题】:How to increase javascript loop delay with easing如何通过缓动来增加 javascript 循环延迟
【发布时间】:2013-12-12 22:49:57
【问题描述】:
我需要从 1 计数到 60,但我想通过缓动来计数,因此例如它会以 100 毫秒的延迟从 1 增加到 30,之后我需要增加延迟以便计数会逐渐当它达到 60 时减速。这是我目前得到的(不多):
var i = 0;
var interval = setInterval(function(){
i += 1;
console.log(i);
if(i == 60) {
clearInterval(interval);
}
}, 100);
【问题讨论】:
标签:
javascript
jquery
loops
intervals
easing
【解决方案1】:
我会使用setTimeout(),类似这样:
var delay = 100, count = 0;
function delayed () {
count += 1;
console.log(count);
if (count > 30) {
delay += 10;
}
if (count < 60) {
setTimeout(delayed, delay);
}
}
delayed();
A live demo at jsFiddle.
【解决方案2】:
这里有一些你可以使用的东西。一点点数学实践
var i = 0, a = 0;
var interval = setInterval(function(){
i += 1;
a = parseInt(Math.log(i)*Math.log(i)*100, 10);
print(i, a);
if(i == 60) {
clearInterval(interval);
}
}, 100);
function print(i, a){
setTimeout(function(){
console.log(i)
},a);
}
基本上a的值会逐渐增加。您可以观察到i 打印次数的非常细微的时间差异
【解决方案3】:
为什么不连续减速呢?在我看来看起来好多了。我相应地更新了@Teemu 的答案。见this fiddle。
var delay = 0, count = 0;
function delayed () {
count += 1;
console.log(count);
//adjust to influence overall speed
delay+=5;
if (count <60) {
setTimeout(delayed, delay);
}
}