【Web動畫】SVG 實現複雜線條動畫

2021-02-18 iCSS前端趣聞

在上一篇文章中,我們初步實現了一些利用基本圖形就能完成的線條動畫:

【Web動畫】SVG 線條動畫入門[1]

當然,事物都是朝著熵增焓減的方向發展的,複雜線條也肯定比有序線條要多。

所以,很多時候,我們無法人工去畫出一些十分複雜動畫的線條,這個時候,就要藉助我們前端的好幫手 PS 和 AI:

好了,假定我們現在要製作下圖 GIF 這樣的一個 loading 圖:

上面這個 SVG 線條動畫的路徑 path ,如果靠自己手工一個點一個點定位調試畫出來的話,嘿嘿嘿你去試試。


使用 PS 導出路徑

估計靠手工能畫出來,也沒了大半條命。好,輪到工具上場,看看我們的原圖在 PS 下長什麼樣子(支持透明通道的 PNG、GIF 為佳):

好,選中選框工具,按下 CTRL 選中圖層, 再選擇建立工作路徑:

這個時候會彈出一個設定容差大小的選擇,可以用不同大小的容差多試幾次,直到得到一個自己滿意的路徑。

容差是什麼?可以理解為一種精確度,在選取顏色時所設置的選取範圍,容差越大,選取的範圍也越大,其數值是在0-255之間。

好,這個時候,路徑算是建立完成了,可以把圖層的透明度設置為 0 ,就能清晰的看到路徑長啥樣:

嗯,路徑還挺帥的。

好,到了 PS 中的最後一步,點擊文件選項,導出路逕到 illustrator ,看圖,照著操作就好:

在 illustrator 中生成 SVG 文件

打開 AI ,打開剛剛用 PS 導出的 *.ai 文件。

沒有 AI ?身為前端居然連 AI 也沒裝( ̄△ ̄;) ,其實我也是因為 SVG 才上手的,趕緊下一個吧。

可能你看到的是一片空白,別慌,使用選擇工具選一個矩形,就能選中路徑啦。

如果你是 PS 鋼筆工具小能手,還可以繼續對路徑進行修改,直到自己滿意為止。

OK,接下來就是調整畫布大小,最好是路徑左上角和畫布左上角對齊,然後選中存儲為 SVG 文件。

好,其實 AI 也沒做什麼,路徑是使用 PS 生成的,為什麼不直接用 PS 生成 *.svg 文件呢?因為我用的版本 PS 還沒支持直接存儲為 SVG 格式。然後其實也可以直接在 AI 上繪製路徑,這個就看設計師或者你對哪個工具更熟悉了。

獲取 SVG 的 path 路徑

OK,最後把剛剛保存的 *.svg 路徑的文件用瀏覽器打開,一片空白是正常的,右鍵查看網頁原始碼:

大功告成,這裡面,路徑就是我們需要的路徑了!

好,把我們要的 <path> 整個拿出來,運用上一篇文章的線條動畫知識,給它賦予簡單的動畫效果就好:

CodePen Demo -- SVG Path Animation[2]

利用這個技巧,我們就可以去生成各類複雜的 SVG 動畫了:

使用 javascript 計算 path 路徑長度

還有一個問題,線條動畫需要知道整個 path 路徑的長度,簡單的線條我們還可以利用加減法算出整個圖形的長度。那麼複雜路徑的長度怎麼計算?

利用一段簡單的 js 可以完成:

<svg>
    <path d="...">
</svg>

var obj = document.querySelector("path");
var length = obj.getTotalLength();

console.log(length); // 377.0433

好了,有了複雜圖形的一些路徑,我們就可以製作出很多酷炫 SVG 動畫效果了。撒花。

最後

本文到此結束,一個簡單的製作複雜 SVG 路徑的技巧,希望對你有幫助 :)

更多精彩 CSS 技術文章匯總在我的 Github -- iCSS[3] ,持續更新,歡迎點個 star 訂閱收藏。

如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

參考資料[1]

【Web動畫】SVG 線條動畫入門: http://www.cnblogs.com/coco1s/p/6225973.html

[2]

CodePen Demo -- SVG Path Animation: http://codepen.io/Chokcoco/pen/GNbwYV/

[3]

Github -- iCSS: https://github.com/chokcoco/iCSS

相關焦點

  • 【Web動畫】SVG 線條動畫
    通常我們說的 Web 動畫,包含了三大類。個人認為 3 種動畫各有優劣,實際應用中根據掌握情況作出取捨,本文討論的是我認為 SVG 中在實際項目中非常有應用價值 SVG 線條動畫。舉個慄子SVG 線條動畫,在一些特定的場合下可以解決使用 CSS 無法完成的動畫。尤其是在進度條方面,看看最近項目裡的一個小需求,一個這種形狀的進度條:把裡面的進度條單獨拿出來,也就是需要實現這樣一個效果:
  • 線條之美,玩轉SVG線條動畫
    通常來說web前端實現動畫效果主要通過下面幾種方案:css動畫;利用css3的樣式效果可以將dom元素做出動畫的效果來
  • SVG 線條動畫入門
    CSS3 動畫javascript 動畫(canvas)html 動畫(SVG)個人認為 3 種動畫各有優劣,實際應用中根據掌握情況作出取捨,本文討論的是我認為 SVG 中在實際項目中非常有應用價值 SVG 線條動畫。舉個慄子SVG 線條動畫,在一些特定的場合下可以解決使用 CSS 無法完成的動畫。
  • lottie-web 動畫實現原理
    設計師使用 AE 製作動畫。通過 Lottie 提供的 AE 插件 Bodymovin 把動畫導出 JSON 數據文件。加載 Lottie 庫結合 JSON 文件和下面幾行代碼就可以實現一個 Lottie 動畫。<!
  • SVG 實現動態模糊動畫效果
    動態模糊是一種廣泛使用於動態影像和動畫的技術,它能使動作看起來更加平滑自然。在線演示(http://www.html5tricks.com/demo/html5-svg-motion-blur-effect/index.html)源碼下載(http://www.html5tricks.com/html5-svg-motion-blur-effect.html)動態模糊是靜止圖像或一系列圖像(如電影或動畫)中快速移動物體的明顯圖像拖尾
  • SVG動畫、CSS3動畫常用知識點全解析
    當repeatDur和repeatCount同時作用於同一個<animate>時,動畫終止時間取兩者中較小值。複雜動畫之多節點變化的動畫1.2. svg的<animateTransform>標籤實現transform屬性改變的動畫,需要使用<animateTransform>來替代<animate>。
  • svg 動畫介紹(一)
    今天講svg的動畫屬性 animate、animateTransform、animateMotion(第一節)SVG 動畫元素
  • 十分鐘教你用svg做出精美的動畫!
    前言經常在Codepen上看到大俠們用SVG畫出不可思議的動畫,我一直很好奇他們是怎麼運作的,總覺得這需要對SVG有足夠透徹的了解,並且自己畫出那些SVG圖案,才有辦法讓他動起來。但其實不然,今天教大家一個簡單的小技巧,讓你快速實現一個svg動畫!
  • 使用 SVG 製作加載動畫
    將 AE 動效稿子轉成 SVG 動畫的話 Airbnb 有出過一款 Lottie 的工具。通過它的 AE 插件 Bodymovin 能夠以 JSON 的形式導出動畫信息和素材。然後在網頁上使用 bodymovin.js 動畫播放庫載入該 JSON 素材即可完成動效的轉換。
  • 十分鐘教你用 svg 做出精美的動畫!
    前言經常在Codepen上看到大俠們用 SVG 畫出不可思議的動畫,我一直很好奇他們是怎麼運作的,總覺得這需要對 SVG 有足夠透徹的了解,並且自己畫出那些 SVG 圖案,才有辦法讓他動起來。但其實不然,今天教大家一個簡單的小技巧,讓你快速實現一個 svg 動畫!
  • 使用Anime.js製作火箭升空的動畫效果
    於是我就準備在項目中添加動畫元素。             動畫效果展示  經過搜尋引擎的內容索引,我發現現在這個階段可以實現動畫效果有幾種方式:gif, css3, openGL,canvas,Javascript等。我首先排除了gif這種方式,原因很簡單這種動畫方式會隨著網頁的縮放失真,我們無法預期用戶展開網站之後的尺寸所以就先pass掉了。
  • 一篇文章帶你了解SVG 動畫元素
    SVG <Animation> 動畫元素用於為SVG圖形製作動畫。動畫元素最初是在同步多媒體集成語言(SMIL)中定義的。在動畫中,必須指定屬性,運動,顏色,動畫的開始時間和動畫的持續時間的開始和結束值。
  • 「看相」黑科技:SVG 動畫在 H5 項目中的運用
    支持動畫,與現有技術可以互動融合。例如,SVG 技術本身的動態部分(包括時序控制和動畫)就是基於 SMIL 標準。另外,SVG 文件還可嵌入 JavaScript(嚴格地說,應該是ECMAScript)腳本來控制SVG對象。SVG 圖形格式可以方便的創建文字索引,從而實現基於內容的圖像搜索。
  • Svg和CSS的結合--打勾動畫
    我們常常會在一些APP和網頁上看到這樣的動畫--當我們點擊某個按鈕時會看到頁面彈出或者顯示出一個提交成功等提示動畫。
  • 教你用PixiJs實現複雜動畫
    前言此篇文章源於前段時間商業有個項目需求,要實現一個比較複雜的H5交互動畫。那說到動畫常用的技術方案無非是下面幾種:gif圖和css3動畫屬性顯然只能實現展示型動畫,而通過原生代碼實現交互動畫又是很複雜的,同時還得考慮動畫的兼容性和性能問題。
  • 【效果高能】你不知道的 Animation 動畫技巧
    引言—在 web 應用中,前端同學在實現動畫效果時往往常用的幾種方案:css3 transition / animation - 實現過渡動畫setInterval / setTimeout - 通過設置一個間隔時間來不斷的改變圖像的位置requestAnimationFrame - 通過一個回調函數來改變圖像位置,由系統來決定這個回調函數的執行時機
  • Web動畫
    CSS 對比 JavaScript 動畫有兩種主要方法在網頁上創建動畫:使用 CSS 和使用 JavaScript。 您選擇哪種方法實際上取決於項目的其他依賴關係,以及您嘗試實現什麼類型的效果。使用 CSS 動畫來實現較簡單的「一次性」轉換,例如切換 UI 元素狀態。當您想要高級效果時,例如彈跳、停止、暫停、倒退或減速,則使用 JavaScript 動畫。
  • Web 動畫幀率(FPS)計算
    (點擊上方公眾號,可快速關注)作者: 伯樂在線/chokcoco http://web.jobbole.com/93325
  • K歌禮物視頻動畫 web 端實踐及性能優化回顧
    ‍‍‍‍‍‍在隨後的新 pc 主播端項目中我們對直播工具進行重構 (主界面 UI 基於 web 完成),禮物動畫部分由於當時沒有 web 版本的 sdk,為了復用線上已有的動畫資源以及和移動端保持對齊的效果,web 端通過
  • 49期:利用clip-path製作css動畫
    引最近工作項目中有製作動畫效果的需求,查閱了一些網站之後,在一個名叫species-in-pieces的網站(species-in-pieces.com)看到了以下神奇的動畫效果:用Chrome的開發者工具窺探一番之後,發現這個酷炫的動畫效果基本是純css實現的!其實現核心就是css3中加入的 clip-path 屬性。