CSS 實現加載動畫之一-菊花旋轉


最近打算整理幾個動畫樣式,最常見的就是我們用到的加載動畫。加載動畫的效果處理的好,會給頁面帶來畫龍點睛的作用,而使用戶願意去等待。而頁面中最常用的做法是把動畫做成gif格式,當做背景圖或是img標簽來引用,這種方式最簡單,也不會有兼容性的問題。不過本人有時愛折騰,看到一些動畫的效果,不管是簡單也好,復雜也好,也想嘗試用代碼來實現它,換一種思維方式,就算在項目中用到的可能性很小,自己多動手多寫寫總歸不會有壞處。

CSS3新增了很多強大的功能,雖然會有兼容性的問題,但是阻擋不了我們去使用它的這些新特性。像一些簡單的動畫以前靠畫圖工具來實現,現在單純用CSS也能非常簡單的實現。下面的案例就是利用CSS加html如何實現菊花旋轉的動畫。

 

1.先看gif圖

 

2.代碼實現思路

將這個動畫分解下,共有五個步驟,先用一張圖來說明下:

 

2.1 先定義元素容器,定義每個線條的位置。

2.2 因為考慮到旋轉時每根線條的透明度不一致,故要把單根線條分為兩個區塊。

2.3 使用CSS的rotate方法來對線條進行旋轉,旋轉的度數取決於線條的數量,最終使線條形成一個正圓。

2.4 在形成圓形的線條上面覆蓋一個與背景同色的正圓,正圓圓心與線條形成的圓心保持一致,這樣整個形狀就會有鏤空的感覺。

2.5 這一步最關鍵,就是形成動畫的核心,其實整個動畫的實現過程非常簡單,就是改變每根線條的透明度,這個可以通過animation的動畫延遲來實現,即每根線條的動畫延遲時間根據其位置決定。

 

3. 主要使用的技術

主要用到了CSS3的rotate旋轉方法和animation方法。

3.1 rotate

rotate是transform方法中的一個屬性,除了rotate之外,還有translate(平移),scale(縮放),skew(拉伸)。具體的就不詳細解釋了。

3.2 animation

animation方法的使用步驟是先使用@關鍵字定義動畫的關鍵幀,然后在對應的樣式名稱里來引用。

案例中先定義動畫load

@-webkit-keyframes load{
0%{opacity:0;}
100%{opacity:1;}
}

然后在使用動畫的節點樣式里來引用

.m-load2 .line div:nth-child(1):before{-webkit-animation:load 1.2s linear 0s infinite;}

其中load 1.2s linear 0s infinite這幾個值分別對應動畫的名稱,動畫持續的時間,動畫顯示的方式,動畫的延遲時間,動畫是否循環播放

另外還有動畫播放的次數,動畫是否反向播放等。

 

4.案例源代碼

 

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
 5 <title>CSS3實現加載的動畫效果1</title>
 6 <meta name="author" content="rainna" />
 7 <meta name="keywords" content="rainna's css lib" />
 8 <meta name="description" content="CSS3" />
 9 <style>
10 *{margin:0;padding:0;}
11 body{background:#535353;}
12 
13 .m-load,.m-load2{width:36px;height:36px;margin:100px auto;}
14 .m-load{background:url('load-v1.gif') #535353 center center no-repeat;}
15 .m-load2{background:#535353;}
16 
17 /** 加載動畫的靜態樣式 **/
18 .m-load2{position:relative;}
19 .m-load2 .line div{position:absolute;left:16px;top:0;width:3px;height:36px;}
20 .m-load2 .line div:before,.m-load2 .line div:after{content:'';display:block;height:50%;background:#fcfcfc;border-radius:5px;}
21 .m-load2 .line div:nth-child(2){-webkit-transform:rotate(30deg);}
22 .m-load2 .line div:nth-child(3){-webkit-transform:rotate(60deg);}
23 .m-load2 .line div:nth-child(4){-webkit-transform:rotate(90deg);}
24 .m-load2 .line div:nth-child(5){-webkit-transform:rotate(120deg);}
25 .m-load2 .line div:nth-child(6){-webkit-transform:rotate(150deg);}
26 .m-load2 .circlebg{position:absolute;left:50%;top:50%;width:18px;height:18px;margin:-9px 0 0 -9px;background:#535353;border-radius:18px;}
27 
28 /** 加載動畫 **/
29 @-webkit-keyframes load{
30     0%{opacity:0;}
31     100%{opacity:1;}
32 }
33 .m-load2 .line div:nth-child(1):before{-webkit-animation:load 1.2s linear 0s infinite;}
34 .m-load2 .line div:nth-child(2):before{-webkit-animation:load 1.2s linear 0.1s infinite;}
35 .m-load2 .line div:nth-child(3):before{-webkit-animation:load 1.2s linear 0.2s infinite;}
36 .m-load2 .line div:nth-child(4):before{-webkit-animation:load 1.2s linear 0.3s infinite;}
37 .m-load2 .line div:nth-child(5):before{-webkit-animation:load 1.2s linear 0.4s infinite;}
38 .m-load2 .line div:nth-child(6):before{-webkit-animation:load 1.2s linear 0.5s infinite;}
39 .m-load2 .line div:nth-child(1):after{-webkit-animation:load 1.2s linear 0.6s infinite;}
40 .m-load2 .line div:nth-child(2):after{-webkit-animation:load 1.2s linear 0.7s infinite;}
41 .m-load2 .line div:nth-child(3):after{-webkit-animation:load 1.2s linear 0.8s infinite;}
42 .m-load2 .line div:nth-child(4):after{-webkit-animation:load 1.2s linear 0.9s infinite;}
43 .m-load2 .line div:nth-child(5):after{-webkit-animation:load 1.2s linear 1s infinite;}
44 .m-load2 .line div:nth-child(6):after{-webkit-animation:load 1.2s linear 1.1s infinite;}
45 </style>
46 </head>
47 
48 <body>
49 <div class="m-load"></div>
50 
51 <div class="m-load2">
52     <div class="line">
53         <div></div>
54         <div></div>
55         <div></div>
56         <div></div>
57         <div></div>
58         <div></div>
59     </div>
60     <div class="circlebg"></div>
61 </div>
62 </body>
63 </html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM