svg動畫在網頁中是常常見到的,svg動畫使得網頁看起來清新美觀javascript
任何不規則圖形均可以由svg繪製完成,固然也包括文字,文字自己就能夠看做一個不規則圖形🐎css
仍是按之前的流程,開始放代碼前,先看效果:html
很酷炫有木有?!!!java
在我發現這個效果的時候,我以爲碉堡了,直到我知道了它的代碼編輯器
代碼真的很簡單,很簡單。。。svg
咳咳。不扯了,如今進入正題工具
在使用網頁作svg動畫的時候首先咱們要有svg文件,這裏我使用的是Ai來作svg文件
字體
其實我感受Ai和PS真的好像,動畫
新建文件-->文字工具-->選本身喜歡的字體和大小spa
而後選菜單上的 文字-->建立輪廓
這樣文字的輪廓就出來了,接下來用svg格式保存文件。
以後又會彈出一個窗口,無論它,直接用默認選項,點肯定就行
以後把svg文件導入到文本編輯器中(這裏我用的是WebStorm)
導入後是這樣的:
這些讓人看着眼花繚亂的數字,就是Ai生成的文字的路徑
咱們只須要path標籤裏的東西
新建一個html文件,建立一個div裏面包着svg,svg裏面包着咱們得到的path標籤
div的css樣式:
1 width: 400px; 2 height: 300px; 3 margin: 0 auto;
由於在Ai創建的svg大小就是400*300,因此我這裏也弄成同樣大小
svg樣式:
1 width: 400px; 2 height: 300px;
我給全部的path標籤訂了一個類名,叫word
1 .word {
2 stroke-dasharray: 500;
3 animation: draw 8s linear forwards;
4 }
stroke-dasharray表示虛線的長度,我這裏設的是五百的長度,但一個字母的邊框長度顯然沒有五百,因此看到的也就是實線
接下來設置動畫效果:
1 @keyframes draw {
2 0%{ 3 stroke-dashoffset: 500;
4 } 100% {
5 stroke-dashoffset: 0;
6 }
7 }
stroke-dashoffset表示繪製點距離起點的距離,因爲我不知道字母的寬度,這裏我直接用500代替,從500到0,就畫出了整個字母邊框,
在path標籤中添加以下屬性
fill-opacity="0" stroke="#FFF" stroke-width="1.5"
固然也能夠在css中設置
這樣一個文字描邊的動畫就大功告成了
若是你想要用虛線描邊,就把stroke-dasharray設置小一點,好比我設置10
就看到這樣的效果:
![](http://static.javashuo.com/static/loading.gif)
若是你想要動畫永遠進行下去
animation: draw 8s linear forwards;
把forwards設置成infinite就能夠一直重複動畫了
通常svg動畫都須要配合javascript一塊兒使用的,好比stroke-dashoffset由於我不知道具體輪廓長度,就只設成500甚至更多,那麼在javascript中是能夠獲取輪廓長度的
1 path.getTotalLength();
這個方法就能夠獲取字母的輪廓長度。
什麼?你不想要這種效果?
你想要把字母一個個按順序畫出來?也能夠:
只要給每一個path定一個id,在按時間順序執行動畫
1 #st0{animation: draw 2s ease forwards;} 2 #st1{animation: draw 2s ease .5s backwards;} 3 #st2{animation: draw 2s ease 1s backwards;} 4 #st3{animation: draw 2s ease 1.5s backwards;} 5 #st4{animation: draw 2s ease 2s backwards;} 6 #st5{animation: draw 2s ease 2.5s backwards;} 7 #st6{animation: draw 2s ease 3s backwards;} 8 #st7{animation: draw 2s ease 3.5s backwards;} 9 #st8{animation: draw 2s ease 4s backwards;}
效果以下:
效果很不錯,代碼很簡單,只要學懂了,就能起到觸類旁通的效果。