1. 程式人生 > >jQuery Animation實現CSS3動畫

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()方法產生的節奏來實現動畫。以此類推,我們就可以實現很多效果了。具體例子請參考這裡

參考文件