1. 程式人生 > >使用JavaScript製作SVG動畫

使用JavaScript製作SVG動畫

更多資訊請訪問原文

在JavaScript中,使用CSS3或Web Animations API的瀏覽器本身可以實現的功能非常多。簡單的動畫和轉換非常適合CSS3–而更復雜的動畫需要使用JavaScript來完成。

Web Animation API的問題是瀏覽器支援和當前功能集。作為一個相當年輕的規格,這在未來幾年會有所改進。

為了對抗這個功能和瀏覽器支援的不足,我們可以轉向動畫庫,比如GreenSock(GSAP)。GSAP使我們能夠建立複雜的動畫和多個時間線,並能夠動畫幾乎任何元素或屬性/值對 – 所有這些都通過簡單直觀的語法來實現。

在本教程中,我們將使用GSAP庫建立一些動畫。我們將建立的主要和最複雜的動畫將從白天到晚上過渡場景,我們將看到我們可以輕鬆地將多個轉場連結在一起以建立複雜的動畫。我們還將建立一些我們將不斷執行的簡單動畫。

01. 檔案設定

首先,我們需要分叉GreenSock Pen以試用其高階外掛。對於本教程,我們將使用已經優化並貼上到我們的HTML編輯器中的SVG。但是,如果您使用自己的SVG,則需要確保所有元素都具有唯一的ID。

02. 建立第一個時間表

GSAP提供兩種時間線型別:TimelineLite和TimelineMax。TimeLineMax版本提供了其他功能,例如重複動畫的能力,以及其他功能。我們的第一個時間表將是水,我們將無限次地來回重複。

JavaScript
1234varanimation_water=newTimelineMax({repeat:-1,yoyo:true});

03. 建立第一個動畫

為了給水體加上動畫,我們在SVG中有另一條路徑,隱藏著’0’不透明度。我們將利用morphSVG外掛將我們原來的水路改造成新的水路。我們將y軸上的水元素’12px’向下移動。該屬性末尾的兩個數字分別表示延遲時間和開始時間。

JavaScript
123456animation_water.to("#water",2,{y:12,morphSVG:"#water-2",ease:Linear.easeNone},0,0);

04. 可重複使用的屬性

由於我們將重複使用許多屬性和值,我們將為這些屬性建立變數。

JavaScript
1varanimation_ease=Linear.easeNone;

05. 控制檯日誌

GSAP圖書館使我們能夠從任何給定的時間表中獲取多個屬性。我們可以將這些記錄在控制檯中,以確保一切正常,正如我們所期望的那樣。

JavaScript
12345console.log('animation_water duration: '+animation_water.duration().toFixed(2));

06. 雲時間軸和控制檯日誌

對於我們希望單獨進行動畫製作的每個元素,我們需要不斷建立新的時間線。我們還希望在控制檯中記錄時間線。

JavaScript
12345678varanimation_cloud=newTimelineMax({repeat:-1,yoyo:true});console.log('\n'+...animation_cloud.duration().toFixed(2)+' \n');

07. 雲彩動畫

現在我們已準備好時間表,我們可以建立我們的雲動畫。採用新屬性的動畫片段可以處理多個使用逗號分隔的屬性/值對。

我們的雲動畫只需要微妙,所以我們只需要少量更改這些值。

JavaScript
123animation_cloud.to("#cloud",3,{x:-2,y:1,scale:0.95,rotation:1,ease:animation_ease},0,0);

08. 建立夜間動畫

接下來,我們將開始建立我們的日常動畫。我們將為週期時間和一天建立一個變數。GSAP中的’yoyo’設定也使我們能夠在重複之前延遲動畫。

JavaScript
1234567varday_night_cycle_time=15;varanimation_delay=day_night_cycle_time/2;varanimation_toNight=newTimelineMax({repeat:-1,yoyo:true,repeatDelay:animation_delay});

09. 動畫重疊圖層

在我們的SVG中,我們有一個由矩形組成的覆蓋圖層,覆蓋整個影象,具有與我們夜間背景相同的背景漸變。覆蓋層應用“乘法”混合模式以使整個影象變暗。我們的動畫只是轉換這個元素的不透明度。

JavaScript
12345678animation_toNight.to('#nighttime-overlay',day_night_cycle_time,{opacity:1,ease:animation_ease},0,0);

10. 為漸變設定動畫

GSAP在常用的“to”和“from”型別之上提供其他補間。為了讓我們的漸變具有動畫效果,我們需要的補間型別是’錯開’到’補間’。我們還可以使用“迴圈”屬性來將色輪旋轉到我們的新值。

JavaScript

相關推薦

使用JavaScript製作SVG動畫

更多資訊請訪問原文↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑在JavaScript中,使用CSS3或Web Animations API的瀏覽器本身可以實現的功能非常多。簡單的動畫和轉換非常適合CSS3–而更復雜的動畫需要使用JavaScript來完成。Web Anima

JavaScript製作網頁動畫

程式碼如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>window物件</title> <script type

前端--JavaScript製作月亮升起小動畫

先說我們這個小動畫想要達到的效果: 月亮最開始藏在海中,只露出一點點。 隨著時間,開始慢慢上升,直到一個高度停止。 當月亮停止上升,出現一首詩。 效果一: 我們先設定一個div,設定你想要的圖為背景,以讓其他圖片可以很方便的覆蓋在上面。這個div中包含三個div:

JavaScript】explode動畫

lte ctu 起點 運動 max cnblogs pic 位置 raw 這是一個js實現的粒子聚合文字或圖片的動畫特效 部分程序如下 n.container = n.container[0] || n.container; /*有且僅有一個cont

SVG 學習<五> SVG動畫

ont class web mar anim pan 分解 pre .html 先上個動畫圖 說道SVG動畫不得不提到兩個屬性:stroke-dasharray(這個前面有提到,做虛線的)stroke-dashoffset (這個是關鍵)。 先說說stroke-dasha

SVG動畫.資料(20180208)

gpo dex ref svg href index cnblogs target 資料 1、   手把手教你輕松實現SVG動畫.html(https://baijiahao.baidu.com/s?id=1571093667630324&wfr=spider&am

SVG動畫.skew測試

key nsf svg動畫 理解 forward utf 動畫 圖形 編碼格式 1、ZC:CSS的動畫 裏面 沒有涉及到 translateX的相關信息,但是實際看到 圖形確實在右移。   ZC:我的理解:本來 元件的CSS樣式是有 translateX的,動畫裏面 確沒有

HTML+Javascript製作拼圖小遊戲詳解(二)

上一篇我們說了網頁的基本佈局。接下來將為大家帶來具體的實現方法。 拼圖通表格來實現,做一個方形的表格,改變其大小使之如圖所示。 試想一下如果我們將一張圖片剪成6張分別放入對應位置,然後再把它打亂,這樣就可以進行拼圖了。 可是,將圖片放入和打亂圖片倒是不難,可想要實現移動圖片,這就有一點麻煩了。 不

svg動畫(跟著圖片描邊)

效果圖   <!DOCTYPE html> <html lang="en">     <head>         <meta charse

製作GIF動畫簡單教程,製作GIF動畫簡單方法

GIF動畫在QQ和微信聊天中我們經常需要用到(你們肯定都鬥過圖)。那麼我們如何製作GIF動畫呢?製作GIF動畫又有哪些簡單的方法呢?下面小編就來分享給大家,教大家如何使用迅捷GIF製作工具製作GIF動畫。   迅捷GIF製作工具http://www.xunjieshipin.com/d

告訴你如何快速製作跨平臺動畫

        最近很多朋友諮詢跨平臺動畫的問題,這裡簡單跟大家說一下。 所謂跨平臺,就是能在目前主流的所有平臺上正常執行使用,而HTML5是目前為止最完美的解決方案。         隨著行動網路的發展,越來越

進度條製作-CSS動畫

溫馨提示 程式碼參考 [本人部落格]:【https://blog.csdn.net/qq_41115965/article/details/83713343】 程式碼修改 不同於使用 GIF 圖片,使用 CSS3 動畫的時候 loading 佈局,應做以下改變:

進度條製作-GIF動畫

網頁進度條製作 一、為什麼需要網頁進度條 隨著HTML的普及,各種CSS3動畫及特效在網頁中層出不窮,PC端載入資料的速度還算可以,移動端相對要慢很多,如果圖片或指令碼沒有完全載入,使用者在操作中可能發生各種問題,因此我們需要對載入資料進行檢測,以更加人性化的方式給使用者展現。

使用css3製作時鐘動畫

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <

HTML+Javascript製作拼圖小遊戲詳解(終)

上次我們已經講解了製作的原理,並且展示了主要程式碼。 這次我將完整的程式碼給大家,僅供參考。 HTML部分如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

JavaScript製作鐘錶

最終的效果圖如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>表</title> &

IOS多媒體-使用UIImageView製作動畫

首先匯入一組連續拍攝的圖片到資原始檔中 建立一個UIImage陣列並將圖片新增到陣列中  var images = [UIImage]()      for i in 1...19 {      images.a

[Xcode10 實際操作]六、媒體與動畫-(13)使用UIImageView製作動畫

本文將演示如何將匯入的序列圖片,轉換為幀動畫。 在專案導航區開啟資原始檔夾【Assets.xcassets】 【+】->【Import】->選擇圖片->【Open】 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIK

JavaScript操作SVG的一些知識

網頁來源:http://blog.iderzheng.com/something-about-svg-with-javascript/ 前陣子學習了一下SVG(Scalable Vector Graphics),希望能借此彌補自己在圖形藝術上的不足,當然最後也沒有得到什麼提高,不過也擴充了一些網

原生js製作勻速動畫與輪播圖注意事項

筆者最近在創作輪播圖,碰到了不少坑,特此分享 1.輪播圖需要製作多一張圖片作為緩衝,使用cloneNode來實現: //1.1必須克隆li標籤,用來過渡動畫 $('ul').appendChild(lis[0].cloneNode(true)); 2.在製作勻速動畫