面試官: 用css實現android系統的loading動畫

源碼: github.com/any86/any-u…

ios/android

web常用的loading圖標有2種, 一種是ios的"菊花", 一種是android的"環". 今天我們用svg實現android的"環"動畫, 下節課實現ios的"菊花".

注意: gif幀數少的原因, 實際動畫效果是很平滑的.

demo

xml(svg)

<svg width="36" height="36" viewBox="0 0 50 50" class="a-loading-android"><circle cx="25" cy="25" r="20" fill="none" stroke="currentColor"  stroke-width="5"></circle>
</svg>
復制代碼

首先我們定義svg的畫布尺寸為50x50, 在瀏覽器中縮放為36x36顯示(這個36你可以根據實際需要調整), 定義環的圓心坐標為25,25, 半徑為20(算下周長大概為125, 后面會用到), 顏色為currentColor獲取父元素的color屬性的值, 環的寬度為5像素, 看下在沒寫css前的效果:

scss

.a-loading {&-android {animation: rotate 2s linear infinite;transform-origin: center center;>circle {display: inline-block;animation: dash 1500ms ease-in-out infinite;stroke-linecap: round; // 端點是圓形color: currentColor;}@keyframes rotate {100% {transform: rotate(360deg);}}@keyframes dash {0% {stroke-dasharray: 1, 200;}50% {stroke-dasharray: 100, 200;stroke-dashoffset: -45;}100% {stroke-dasharray: 100, 200;stroke-dashoffset: -124;}}}
}
復制代碼

stroke-dasharray

先解釋stroke-dasharray, 他是用來定義虛線的, 比如stroke-dasharray="50, 20"表示實線部分為50, 間隙20的虛線:

試想一下, 如果環也用虛線表示, 并且讓單位實線部分的長度在環的周長范圍內變化,這不就實現了(半環/滿環等形態), 下面分別是stroke-dasharray的值為25, 200/ 50, 200 / 100, 200:
注意: 這里的200是隨意定義的, 表示虛線的間隙, 只要值大于環的周長即可.

stroke-dashoffset

偏移, 值為正數的時候, 虛線逆時針回退, 負數順時針前進(左圖的stroke-dashoffset:0, 環的起點在3點方向, 右圖設置為-10以后, 環的起點被順時針偏移了一段距離):

因為動畫中, 環在增加長度的同時尾部在收縮長度, 所以需要配合stroke-dashoffset實現.

動畫的3個關鍵時刻

**0%**的時刻

讓圓環只呈現一個點, 為了讓循環一周后動畫不突兀(你可以改成0對比下效果).

**50%**的時刻

為了讓圓環呈現80%的環, 所以設置實線部分長度為100(125*0.8, 125是周長): stroke-dasharray: 100, 200;, 同時尾部在收縮, 所以設置stroke-dashoffset: -45;.

**100%**的時刻

回到一個點的狀態, 和0%狀態一致, 這樣動畫循環起來不突兀, 但是從50%到100%的動畫只是"尾部收縮", 所以我們用stroke-dashoffset:-124實現,125-124=1 正好是一個像素, 好了動畫到此就實現完畢了.

整體旋轉

為了和安卓系統的動畫一致, 讓整體也進行旋轉. 這里代碼比較簡單不贅述.

animation屬性的擴展

如果大家仔細看過css的animation的文檔, 會發現animation可以同時支持多個過度動畫, 比如animation: color 6s ease-in-out infinite, dash 1.5s ease-in-out infinite;, 用","分割多個動畫.

所以我們其實還可以對上面的動畫進行擴展, 比如旋轉的同時還有顏色變化:

    &-android {animation: rotate 2s linear infinite;transform-origin: center center;>circle {display: inline-block;// 增加顏色變化的代碼animation: color 6s ease-in-out infinite, dash 1.5s ease-in-out infinite; stroke-linecap: round;color: currentColor;}@keyframes rotate {100% {transform: rotate(360deg);}}@keyframes dash {0% {stroke-dasharray: 1, 200;}50% {stroke-dasharray: 100, 200;stroke-dashoffset: -45;}100% {stroke-dasharray: 100, 200;stroke-dashoffset: -124;}}@keyframes color {0%,100% {stroke: #6b5c5b;}40% {stroke: #0057e7;}66% {stroke: #008744;}80%,90% {stroke: #ffa700;}}}
復制代碼

本文代碼參考iview, 一個vue框架.

轉載于:https://juejin.im/post/5d37fe7de51d455c8838e23d

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

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

相關文章

2018-06-29 西游記主題Python入門示例嘗試-數據結構 5.1-5.1.2

(見前: 中文代碼示例視頻演示Python入門第五章 數據結構 仍然基于官方文檔, 歡迎建議(尤其是如何取材). 5. Data Structures - More on Lists 列表詳述 >>> 人物 [佛, 妖, 凡人, 菩薩, 妖, 凡人] >>> 人物.count(妖) 2 >>> 人物.count(圣人) 0 >…

Niginx 集群負載均衡策略

Niginx 集群負載均衡策略 所需物料 1.Nginx服務 步驟略 本人 nginx version: nginx/1.16.0 2.Java Servlet 測試項目 新建java web 項目&#xff0c;項目名稱為&#xff1a;tt import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annot…

C#循環給多個控件賦值

需要給 多個 文本框重新賦值 1 textBox1.Text"ss"; 2 3 textBox2.Text"ss"; 4 5 textBox999.Text"ss"; 6 7 textBox99999.Text"ss"; 這樣太麻煩&#xff0c;控件過多不方便寫 通過遍歷 一次性賦值&#xff0c;再多也不怕了 將所有T…

記號一次更換IBM X3650M4主板后RAID無法啟動的解決

https://wenku.baidu.com/view/9d503ef367ec102de2bd89d7.html 強烈感謝上面分享文檔的大俠&#xff01;&#xff01; 1、更換主板后&#xff0c;linux系統&#xff0c;無法加載引導。需要設置主板的啟動項 2、選擇boot manager&#xff0c;進到下面的畫面 3、選擇add boot opt…

關于REST API設計的一些小經驗

版權聲明&#xff1a;轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明http://phoenixtoday.blogbus.com/logs/45855234.html 最近小組里有一些關于REST API設計的討論&#xff0c;有些收獲&#xff0c;打算在這里寫一下。通常來講設計第一個版本的REST API并不難&…

1037 在霍格沃茨找零錢

題目傳送門&#xff1a;https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232 題解&#xff1a; #include<iostream> using namespace std;int main() {int Galleon1, Sickle1, Knut1, Galleon2, Sickle2, Knut2;char c;cin >> Galleon…

我對創業和管理的一些看法

創業&#xff0c;對于剛工作的人&#xff0c;會比較興奮&#xff0c;因為創業充滿想象力&#xff1b;對于工作幾年的人&#xff0c;會比較向往&#xff0c;因為壓抑得太久。其實&#xff0c;創業和就業一樣&#xff0c;只是實現自己人生價值的兩種方式&#xff0c;關鍵是心態問…

關于Anaconda的環境和包管理

Anaconda相對于原生python解釋器具有更好的包管理功能&#xff0c;它有一個env文件夾&#xff0c;里面包含所要管理的所有環境&#xff1b;日常操作時我們可能會使用pytorch、Tensorflow等多個環境&#xff0c;由于每個環境對Python的包的兼容性都不一樣&#xff0c;所以我們可…

WCF basicHttpBinding之Message Security Mode

原創地址&#xff1a;http://www.cnblogs.com/jfzhu/p/4067873.html 轉載請注明出處 前面的文章《WCF Security基本概念》介紹了WCF的security mode&#xff0c;簡單說Transport是transport級別上的加密&am…

戰略游戲

題目描述 Bob喜歡玩電腦游戲&#xff0c;特別是戰略游戲。但是他經常無法找到快速玩過游戲的辦法。現在他有個問題。 他要建立一個古城堡&#xff0c;城堡中的路形成一棵樹。他要在這棵樹的結點上放置最少數目的士兵&#xff0c;使得這些士兵能了望到所有的路。 注意&#xff0…

Vue語法學習第三課——計算屬性

模板內的表達式非常便利&#xff0c;但是設計它們的初衷是用于簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。對于任何復雜邏輯&#xff0c;都應當使用計算屬性。 <div id"example"><p>original message : "{{message}}"</p&…

云計算學習資料分享:type查看命令

type 查看命令類型&#xff0c;例如該命令是alias&#xff0c;還是內置命令&#xff0c;還是某個文件&#xff0c;還是關鍵字 哪種神仙&#xff1a;天上還是地上&#xff0c;還是水里游的 [roottianyun ~]# type ll ll is aliased to ls -l --colorauto [roottianyun ~]# type …

neo4j刪除所有節點

MATCH (n)OPTIONAL MATCH (n)-[r]-()DELETE n,r轉載于:https://www.cnblogs.com/luoganttcc/p/10525189.html

Hadoop RPC實例

本文發表于本人博客。 上次寫了個hadoop偽分布環境搭建的筆記了&#xff0c;今天來說下hadoop分布式構建的基礎RPC&#xff0c;這個RPC在提交Job任務的時候底層就是創建了RPC來實現遠程過程調用服務端。 我們首先可以通過Job的waitForCompletion(boolean verbose)方法來跟蹤代碼…

Django 模板語言 標簽

前言&#xff1a;django的模板語法基本和flask的jinja2基本一樣。下面比較一下兩個模板語法的區別。 &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;深度變量的查找&#xff08;萬能的句點號&#xff09; 在 Django 模板中遍歷復雜數據結構的關鍵是…

電子書下載:Illustrated C# 2012 4th

下載&#xff1a;http://www.ctdisk.com/file/9015906轉載于:https://www.cnblogs.com/MaxWoods/archive/2012/08/26/2657752.html

關于83版射雕英雄傳

今天無意中看到網上一群人關于83版射雕的一些爭論.或許一些現在的年輕人不喜歡83版射雕,說那太老土了,但想想那個時代的條件,能拍出這樣的片子,是非常不錯的,而且我覺得83版射雕也是最忠于原著的,跟后來的翻版比較,雖然從畫面效果,人物服裝方面存在差距,但這都是由于歷史原因和…

ZOJ 3735 Josephina and RPG

思路&#xff1a;dp[i][j]:第i輪打完后&#xff0c;決定以j陣容打下一輪 保持原有陣容&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] * p [ j ][ s [ i ] ] 換成第i輪怪的陣容: for(int k0;k<r;k)dp[i][j]max(dp[i][j],dp[i-1][k]*p[k][s[i]]) 優化&#xff1a;用滾動數組&am…

4~20mA電流輸出芯片XTR111完整電路(轉)

源&#xff1a; 4~20mA電流輸出芯片XTR111完整電路轉載于:https://www.cnblogs.com/LittleTiger/p/10511115.html

電子書下載:Programming Microsoft LINQ in Microsoft .NET Framework 4

Book DescriptionDig into LINQ — and transform the way you work with data. With LINQ, you can query data from a variety of sources — including databases, objects, and XML files — directly from Microsoft Visual Basic or C#. Guided by data-access experts w…