【问题标题】: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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 1970-01-01
        • 2023-04-04
        • 2021-05-30
        相关资源
        最近更新 更多