2012-12-28 21 views
1

首先,this code,尽管丑陋,它适用于所有意图和目的。然而,这真让我感到生病和生气。更好的方式来运行动画的有限循环

对于懒惰,吸住代码的主要部分是这样的:

setTimeout(function() { 
    toggle(); //off 
    setTimeout(function() { 
     toggle(); //on 
     setTimeout(function() { 
      toggle(); //off 
      setTimeout(function() { 
       toggle(); //on, stays for stallTime 
       setTimeout(function() { 
        toggle(); //off 
        callback(); 
       }, stallTime); 
      }, 300); 
     }, 300); 
    }, 300); 
}, 300); 

我会的,当然,爱情是可通过改变元素的CSS类来控制我的动画。然而,最不可靠的是transitionendwebkitTransitionEnd等。我是不是要诉诸这种可怕的代码?理想情况下,我希望能够设置可变数量的“闪烁”,但此代码太笨拙。

请从我的fil rescue中拯救我。

+0

你为什么不设置一个循环做到这一点,而不是...? – jeremy

+0

,因为它需要定时,并且CSS正在控制转换时间。一个循环会在不等待的情况下发射很多次。 – Jason

+0

如果你喜欢[this](http://jsfiddle.net/6RDJk/) – jeremy

回答

3
var count = 5; 
var i = setInterval(function() { 
    toggle(); 
    count--; 
    if(count == 0) { 
     clearInterval(i); 
     callback(); 
    } 
}, 300); 
+0

辉煌。这是我应该知道的一个明显的答案。我把它归咎于假期。谢谢! – Jason

+0

尼罗河虽然较短。 :) –

+0

我也推荐它,因为它不使用间隔。你也可以使用递归函数。 – jeremy

1

为了避免setInterval,我写了一个递归函数:

// link.addClass('hover'); //on - no longer needed 

flash = function(count) { 
    if (count > 1) { 
     setTimeout(function() {   
      toggle(); 
      flash(count - 1); 
     }, 300); 
    } else { 
     setTimeout(function() { 
      toggle(); //off 
      callback(); 
     }, stallTime);    
    }     
} 

flash(6); // 2 * the number of flashes. 
+0

所以...让我们通过使用两个'setTimeout'来避免'setInterval'。有趣的... –

+0

@JaredFarrish不...... CAbbott的代码并没有做到DarkFelcon所做的。如果DarkFelcon也是这样,他还需要两个'setInterval's(或一个'setInterval'和一个'setTimeout')。 CAbbott所做的全部工作正是OP所要求的。如果你看起来足够近,DarkFelcon没有。在接受的答案中没有'stallTime'计时器。 – jeremy

+0

@Nile - 我不认为你*需要*两个单独的'setTimeout'来完成。有什么可以指示帮助我查看我失踪的内容吗?没有两个'setTimeout'一次运行。所以...? –

相关问题