svg高階應用及動畫

2021-10-06 21:14:45 字數 1846 閱讀 9124

canvas 和 webgl 這兩項圖形技術結合 css3 可以說能完成絕大部分的動畫和需求。但 canvas 和 webgl 畢竟是偏向底層的繪製引擎,某些場景使用起來還是過於繁瑣的,不分場合一律使用錘子解決的行為不值得提倡。svg 在解決排版,圖示,相關動畫還是非常高效的,而且 svg 還是向量圖形,高畫質還原各種螢幕尺寸的設計簡直就是神器。

svg 基礎知識不再講解,結合svg特點和應用場景,主要介紹如下幾方面的內容

svg sprite 之於 font-face 的優勢就是向量圖的抗鋸齒效果,再也不需要為適配高清屏而操心。使用方式就是 svg 標籤結合 symbol元素即可,其中 svg 是容器,而symbol 則是元件模板。怎麼把svg元件顯示出來呢?使用 use 元素指向元件的id即可,如下所示:

當然網上有很多任務具可以幫我們把圖示自動sprite,比如:iconfot,gulp-svg-symbols

svg 新增到網頁中有多種方法,最常見的是:

在 html 中內聯

object、 iframe 或 embed 標籤插入

img 標籤

css background-image 屬性

html 內聯方式

使用 object、iframe 或 embed 標籤插入

使用img標籤插入

現在重點介紹一下使用 css background屬性插入的方式;既可以使用路徑也可以使用 base64 格式的data uri 方式

.svg-bg 

.svg-background

我認為使用 background base64 引入svg是最具靈活性的一種方式,還可以加入svg動畫,不需要額外載入圖示,只需引入css即可。同時跟普通相比它又有著抗鋸齒的優勢,因此元素尺寸隨意調整不擔心失真。比如下面使用background data uri 引入的載入動畫css:

svg 除了繪製圖形,插入文字也是很方便的,方式也簡單,使用 text 元素包裹文字內容即可

i love svg
還有一種很實用的效果就是文字路徑,也就是文字按照定義好的 path 進行排列顯示,這需要使用到另乙個標籤 textpath。實現方式:首先定義乙個path元素(這裡使用三次貝塞爾曲線),然後 textpath元素使用 xlink:href 屬性引入path,最後再用 text標籤包裹。

文字路徑 

i love svg i love svg i love svg

這裡只介紹路徑動畫,基礎動畫和變換動畫與css動畫相似,就不再介紹。來看乙個基於 css3 的 animation 實現百分比載入的動畫。這裡用到了兩個關鍵屬性:

首先需要通過js獲取路徑的總長度

//獲取路徑長度

const arc = document.getelementbyid('circle');

console.log(arc.gettotallength());

接著編寫svg相關

當然其他stroke線條動畫也類似

接著我們再基於svg animatemotion標籤來實現path路徑動畫,其中path是運動路徑,dur 是持續時間,repeatcount設定是否迴圈

路徑動畫 

使用svg實現路徑動畫真是價效比超高。

svg波浪動畫

之前做過css動畫 canvas動畫,但svg動畫第一次做,最終效果如下圖所示。由上圖可以看出,波浪動畫是由多個不同的 波浪 組成,而每個波浪則是由近似正弦圖形組成,最後的 波動 效果,其實是靜態的波浪迴圈向左運動產生的。上面是寫好的單個波浪,其中d屬性繪製了形狀,fill屬性表示填充的顏色。d屬性...

SVG動畫之描邊動畫

svg描邊動畫使用stroke dasharray與stroke dashoffset兩個屬性 stroke dasharray屬性可將svg圖形的路徑斷為虛線,如下 是一條直線 如新增stroke dasharray 10 10屬性後,變為下圖 可見直線被分為了間隔為10px的虛線,若實現描邊效果...

Web動畫 SVG 線條動畫入門

通常我們說的 web 動畫,包含了三大類。個人認為 3 種動畫各有優劣,實際應用中根據掌握情況作出取捨,本文討論的是我認為 svg 中在實際專案中非常有應用價值 svg 線條動畫。svg 線條動畫,在一些特定的場合下可以解決使用 css 無法完成的動畫。尤其是在進度條方面,看看最近專案裡的乙個小需求...