jQuery Animation實現CSS3動畫
jQuery Animation的工作原理是通過將元素的CSS樣式從一個狀態改變為另一個狀態。CSS屬性值是逐漸改變的,這樣就可以建立動畫效果。只有數字值可建立動畫(比如 "margin:30px")。字串值無法建立動畫(比如 "background-color:red")。詳細用法請參考jQuery 效果 - animate() 方法和官方教程。
像CSS3好多效果因為不是數值的,所以是沒有辦法直接通過animate()方法實現的。如translate(), rotate(), scale(), skew(), matrix(), rotateX(), rotateY()等方法,這些方法的一個特點就是它們的值是字元和數字混合在一起的。因此我們是不可以直接用animate()方法來動態地修改它們的值來實現動畫的效果。
如果我們自己用JavaScript實現CSS3動畫,那麼我們只能自已通過setInterval()方法來實現,實現起來比較複雜。其實animate()方法就是基於setInterval()方法進行工作的,但是可以用方便的設定動畫速度,還可以設定是勻速還是變速。animate()方法的第二種用法有個step引數規定動畫的每一步要執行的函式。我們可以用使用一個不影響元素效果顯著的CSS值來觸發animate()方法,然後在step回撥函式中修改我們想要修改的值,這樣就可以間接地實現動畫了。請看transform例子:
<div id="box"></div> #box { width:100px; height:100px; position:absolute; top:100px; left:100px; text-indent: 90px; background-color:red; } $('#box').animate({ textIndent: 0 }, { step: function(now,fx) { $(this).css('-webkit-transform','rotate('+now+'deg)'); }, duration:'slow' },'linear');
這裡使用text-indent屬性來觸發動畫,是因為我們這裡沒有文字,所以使用text-indent而不會影響到元素的樣式效果,這裡也可以用font-size等。然後使用animate()方法產生的節奏來實現動畫。以此類推,我們就可以實現很多效果了。具體例子請參考這裡