2012-12-28 36 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'一次運行。所以...? –

相關問題