SVG技術入門:線條動畫實現原理

相信大家都見到過這樣神奇的技術:一副線條構成的畫能自動畫出自己。非常的酷。Jake Archibald是這種SVG技術的首創者,并且寫了一篇非常好的文章來描述它是如何實現的。Brian Suda也在24 Ways網站上討論過它。 Polygon使用它在一篇設計方面的文章里創造出了非常神奇的效果。Codrops也做出了一些非常漂亮的例子。

其實我沒有什么好增補的,只是想把這種技術說的更明白些,所以,在這里我要用我的方式把這種技術再講解一遍。

1. 你有一個SVG圖形

2. 這個圖形必須要有一個線條(stroke)屬性

3. 線條可以是虛線

我們可以用Illustrator制作,也可以用編程實現。我們用CSS來設置這些路徑的樣式(假定我們這里是inline SVG,或通過一個<object>),把它們變成虛線形式。

<svg ...>    <path class="path" stroke="#000000" ... > </svg>
.path {stroke-dasharray: 20; }

這是讓虛線里的每個小線段長度為20px。

4. 可以讓虛線小段的長度變得更長….

.path {stroke-dasharray: 100; }

5. 我們還可以給我們的線條設置”offset”偏移量,這樣會導致虛線里的小線段的位置發生移動。

當我們動態設置圖形中線條的“offset”值時,可以看到這個效果:


可以這樣簡單的實現:

.path {stroke-dasharray: 100; animation: dash 5s linear; } @keyframes dash { to { stroke-dashoffset: 1000; } }

6. 想象,當虛線的小線條足夠長,超過圖形的整個線條長度時

沒有什么變化,整個圖像看起來完全不是虛線。你只需要將stroke-dasharray屬性設置的足夠長,超過整個線條的長度。

7. 現在給線條設置偏移量,讓它不再覆蓋整個圖形。

這樣你就看不見圖形了。

8. 現在動態的慢慢將線條的偏移量設置回歸到0


如果通過CSS,你需要將animation屬性設置成forwards,這樣整個動畫就會停止在它的最終狀態。

.path {stroke-dasharray: 1000; stroke-dashoffset: 1000; animation: dash 5s linear forwards; } @keyframes dash { to { stroke-dashoffset: 0; } }

Tada!

實例演示

?

為什么要用JavaScript?

大部分你看到的SVG線條動畫都使用了JavaScript。這是因為在現實情況中你很難知道線條有多長。我們這里設置的是1000,是因為它碰巧是1000。

用JavaScript獲取長度值的寫法是這樣的:

var path = document.querySelector('.path'); var length = path.getTotalLength();

然后你就可以隨便使用這個值了。文本頂部鏈接的那些文章講的都比本文透徹,你最好還是參考一下那些文章。我只想簡單的講一下這種技術方法,希望它能給你一些啟示。

(英文:How SVG Line Animation Works.)

轉載于:https://www.cnblogs.com/w3cdream/p/4995131.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256359.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習——人工神經網絡之BP算法編程(python二分類數據集:馬疝病數據集)

目錄 一、理論知識回顧 1、神經網絡模型 2、明確任務以及參數 1&#xff09;待估參數&#xff1a; 2&#xff09;超參數&#xff1a; 3&#xff09;任務 3、神經網絡數學模型定義 1&#xff09;激活函數 ? 2&#xff09;各層權重、閾值定義 3&#xff09;各層輸入輸…

Halcon例程(基于多個標定圖的單目相機標定)詳解—— Camera_calibration_multi_image.hdev

一、前言 在我的工業相機專欄里已經將相機標定涉及到的理論部分講解完畢&#xff0c;為什么要標定以及標定要求出什么參數呢&#xff0c;用一個Halcon 例程來幫助理解。 這個例程是比較經典的標定程序&#xff0c;基本將標定過程講的比較清楚&#xff0c;用的標定圖像是系統自…

SkipList 跳表

為什么選擇跳表 目前經常使用的平衡數據結構有&#xff1a;B樹&#xff0c;紅黑樹&#xff0c;AVL樹&#xff0c;Splay Tree, Treep等。 想象一下&#xff0c;給你一張草稿紙&#xff0c;一只筆&#xff0c;一個編輯器&#xff0c;你能立即實現一顆紅黑樹&#xff0c;或者AVL樹…

Redis failover過程

在Leader觸發failover之前&#xff0c;首先wait數秒(隨即0~5)&#xff0c;以便讓其他sentinel實例準備和調整。如果一切正常&#xff0c;那么leader就需要開始將一個salve提升為master&#xff0c;此slave必須為狀態良好(不能處于SDOWN/ODOWN狀態)且權重值最低(redis.conf中)的…

機器學習——深度學習之卷積神經網絡(CNN)——LeNet卷積神經網絡結構

目錄 一、卷積神經網絡 1、卷積神經的作用 2、LeNet 1&#xff09;數據庫準備——minst 2&#xff09;模型 二、關于卷積神經網絡結構的一些術語定義 1、特征圖&#xff08;Feature map&#xff09; 2、height&#xff08;長度&#xff09;、width&#xff08;寬度&…

工業相機(3D)主要參數詳述

一、前言 準確的完成相機選型是一個視覺工程師必備的技能&#xff0c;而選型前必須對其內部參數了如指掌。工業相機是一種比較復雜的產品&#xff0c;其參數很多&#xff0c;每個參數可能會有不同的標準&#xff0c;下面對主要的參數會做比較詳細的闡述。 二、參數詳述 2.1 …

JAVA8永久代

在Java虛擬機&#xff08;以下簡稱JVM&#xff09;中&#xff0c;類包含其對應的元數據&#xff0c;比如類的層級信息&#xff0c;方法數據和方法信息&#xff08;如字節碼&#xff0c;棧和變量大小&#xff09;&#xff0c;運行時常量池&#xff0c;已確定的符號引用和虛方法表…

Struts 2初體驗

Struts2簡介&#xff1a; Struts2是一個基于MVC設計模式的Web應用框架&#xff0c;它本質上相當于一個servlet&#xff0c;在MVC設計模式中&#xff0c;Struts2作為控制器(Controller)來建立模型與視圖的數據交互。 Struts 2 目錄結構:     apps目錄&#xff1a;Struts2示例…

機器學習——深度學習之數據庫和自編碼器

目錄 一、數據庫——數據獲取 1、Mnist 2、ImageNet 二、自編碼器&#xff08;Auto-encoder&#xff09;——參數初始化 1、功能 2、基本思想 1&#xff09;訓練第一層 2&#xff09;訓練第二層及以后的神經網絡 ? 3&#xff09;利用BP對整個神經網絡的參數初始值進…

Halcon例程詳解 (深度圖轉換為3D圖像)—— xyz_attrib_to_object_model_3d

一、前言 深度圖向點云圖進行轉換是進行3D檢測項目時會遇到的問題&#xff0c;halcon里也有針對此問題的相關例程&#xff0c;下面對此例程進行分析。通過學習此例程&#xff0c;我們可以掌握如何將一張深度圖像和一張正常二維圖像轉換為3D點云。 二、分析 * 初始化界面 dev…

動態代理之Cglib淺析

什么是Cglib Cglib是一個強大的&#xff0c;高性能&#xff0c;高質量的代碼生成類庫。它可以在運行期擴展JAVA類與實現JAVA接口。其底層實現是通過ASM字節碼處理框架來轉換字節碼并生成新的類。大部分功能實際上是ASM所提供的&#xff0c;Cglib只是封裝了ASM&#xff0c;簡化了…

機器學習——深度學習之卷積神經網絡(CNN)——AlexNet卷積神經網絡結構

目錄 一、AlexNet卷積神經網絡結構模型 1、數據庫ImageNet 2、AlexNet第一層卷積層 二、AlexNet卷積神經網絡的改進 1、非線性變化函數的改變——ReLU 2、最大池化&#xff08;Max Pooling&#xff09;概念的提出——卷積神經網絡通用 1&#xff09;池化層 2&#xff0…

POJ - 3470 Walls

小鳥往四個方向飛都枚舉一下&#xff0c;數據范圍沒給&#xff0c;離散以后按在其中一個軸線排序&#xff0c;在線段樹上更新墻的id&#xff0c;然后就是點查詢在在哪個墻上了。 這題有個trick&#xff0c;因為數據范圍沒給我老以為是inf設置小了&#xff0c;WA了很多發。&…

C# —— 深入理解委托類型

一. 委托定義 1. 委托與多播委托 委托類型表示對具有特定參數列表和返回類型的方法的引用&#xff0c;定義了委托實例可以調用的某類方法。 通過委托&#xff0c;我們可以動態的通過委托變量來調用委托方法。一般用delegate來命名委托類型,但Action和Func也可以達到同樣的效果…

【VS開發】【C++語言】reshuffle的容器實現算法random_shuffle()的使用

假設你需要指定范圍內的隨機數&#xff0c;傳統的方法是使用ANSI C的函數random(),然后格式化結果以便結果是落在指定的范圍內。但是&#xff0c;使用這個方法至少有兩個缺點。首先&#xff0c;做格式化時&#xff0c;結果常常是扭曲的&#xff0c;所以得不到正確的隨機數&…

C#委托——基礎2

在上一篇隨筆中&#xff0c;簡要說明了怎樣定義委托&#xff0c;定義事件&#xff0c;訂閱事件&#xff0c;最后也實現了效果&#xff0c;就是當員工類的某個對象&#xff0c;執行某個事件時&#xff0c;委托事件被觸發&#xff0c;后面也得到了結果&#xff0c;但是想象一下實…

機器學習——深度學習之編程工具、流行網絡結構、卷積神經網絡結構的應用

目錄 一、編程工具 caffe實現LENET-5 二、流行的網絡結構 1、VGGNET 2、Googlenet ? 3、ResNet? ? 三、卷積神經網絡的應用 1、人臉識別 ? 2、人臉驗證 3、人臉特征點檢測 4、卷積神經網絡壓縮 一、編程工具 caffe的優點&#xff1a;模型標準化&#xff0c;源代碼…

Halcon例程詳解(激光三角系統標定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角測距 激光三角測距法原理很簡單,是通過一束激光以一定的入射角度照射被測目標,激光在目標表面會產生漫反射,在另一角度利用透鏡對反射激光匯聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合組件)位置傳感器上。當被測物體沿激光方向發生移動時,…

【轉】如何實現一個文件系統

如何實現一個文件系統 摘要 本章目的是分析在Linux系統中如何實現新的文件系統。在介紹文件系統具體實現前先介紹文件系統的概念和作用&#xff0c;抽象出文件系統概念模型。熟悉文件系統的內涵后&#xff0c;我們再進一步討論Linux系統中文件系統的特殊風格和具體文件系統在Li…

【tenserflow】——數據類型以及常用屬性

目錄 一、什么是Tensor&#xff1f; 二、Tensorflow常見數據類型 三、Tensorflow常見屬性device\cpu\gpu\ndim\shape\rank等 1、創建一個tensor 1&#xff09;tf.constant() 2)tf.Variable() 2、判斷一個變量是否為tensor張量 3、生成不同設備&#xff08;cpu,gpu&#x…