利用border-radius屬性及動畫屬性制作圓餅loading動畫

百度前端技術(shù)學(xué)院2017于2月24日開始進(jìn)行礼华,一共有6個學(xué)院可供學(xué)習(xí)育特,分別是小薇學(xué)院(html/css基礎(chǔ))、斌斌學(xué)院(js基礎(chǔ))乏梁、耀耀學(xué)院(小游戲/交互)、商業(yè)平臺學(xué)院(web/ios/android)收奔、ECharts & WebVR學(xué)院(VR相關(guān))和糯米學(xué)院(css3/vue等)掌呜,從百度前端技術(shù)學(xué)院今年推出的各學(xué)院任務(wù)看來,目前互聯(lián)網(wǎng)行業(yè)對從事前端行業(yè)的程序員要求越發(fā)高了坪哄。轉(zhuǎn)行前端或是才開始學(xué)習(xí)前端的同學(xué)任重而道遠(yuǎn),大家一起加油,共勉翩肌。

《CSS3圓餅loading效果》作為糯米學(xué)院中的進(jìn)階任務(wù)模暗,目的主要是讓學(xué)員通過完成任務(wù),掌握border-radius屬性的使用以及旋轉(zhuǎn)動畫的設(shè)置念祭。在已經(jīng)完成鼠標(biāo)懸浮效果任務(wù)之后兑宇,相對來說本任務(wù)要簡單很多。以下是總結(jié)粱坤。

任務(wù)分解:該任務(wù)要達(dá)到的效果隶糕。如網(wǎng)頁中顯示情況,可將任務(wù)分解為兩個小任務(wù):

1.制作四分之三圓環(huán)并旋轉(zhuǎn)站玄;
2.制作圓餅枚驻,圓餅內(nèi)有兩種顏色,分別交替旋轉(zhuǎn)擴(kuò)大其扇形區(qū)域(從0deg到到360deg)株旷,以達(dá)到圓餅loading效果再登。

通過完成任務(wù),使用到如下一些重要屬性:

1.制作圓環(huán)晾剖,使用偽元素锉矢,使用border(包括其transparent值);
2.制作圓餅過程中齿尽,使用到animation-timing-function屬性的steps()曲線沽损;
3.圓餅及圓環(huán)的旋轉(zhuǎn),使用animation系列屬性循头,并使用transform設(shè)置旋轉(zhuǎn)角度缠俺,使用transform-origin屬性設(shè)置旋轉(zhuǎn)中心。

以下是完成本任務(wù)后的html結(jié)構(gòu):

<header>
  <h1><a >小星的博客|Small Star's Blog</a></h1>
  <ul>
    <li><a href="#top-bottom1">點我</a></li>
    <li><a href="#top-bottom2">快點我</a></li>
      <li><a href="#top-bottom3">點我吧</a></li>
      <li><a href="#top-bottom4">點我啦</a></li>
  </ul>
</header>
<article>
  <p class="round1">
    <span class="bgcircle">
      <span class="left"><span class="spining"></span></span>
      <span class="right"><span class="spining"></span></span>
    </span>
  </p>
  <p class="round2">
    <span class="bgcircle">
      <span class="inner">
        <span class="spiner"></span>
        <span class="filler"></span>
        <span class="masker"></span>
      </span>
      <span class="inner2">
        <span class="spiner"></span>
        <span class="filler"></span>
        <span class="masker"></span>
      </span>
    </span>
  </p>
</article>
<footer>
  <p>版權(quán)所有 &copy 小星</p>
</footer>
</body>
</html>

其中贷岸,round1為使用第一種方法制作圓餅時的loading整體結(jié)構(gòu)壹士,round2為使用第二種方法制作圓餅時的loading整體結(jié)構(gòu)〕ゾ可以明顯發(fā)現(xiàn)round2方法結(jié)構(gòu)復(fù)雜躏救,實際上其實現(xiàn)方法也較round1方法笨拙。結(jié)構(gòu)樣式代碼請見文末demo代碼地址螟蒸。頁面圖如下:

頁面圖

圓環(huán)及圓餅制作原理如下:

1.四分之三圓環(huán)的旋轉(zhuǎn):
  實現(xiàn)原理:首先將上文html結(jié)構(gòu)中的類名為bgcircle的span元素設(shè)置為圓形(將其border-radius設(shè)置為50%即可)盒使,其寬高大于兩個子元素span,以便圓環(huán)與圓餅分開七嫌。在.bgcircle上設(shè)置偽元素少办,同樣設(shè)置為圓形,大小與.bgcircle相同诵原,再設(shè)置偽元素邊框英妓,其中任一邊框設(shè)置為transparent即可挽放。最后利用animotion和transform設(shè)置旋轉(zhuǎn)動畫。css代碼如下:

/*2-1-1.制作大圓背景*/
.bgcircle{
  position:relative;
  display:inline-block;
  height:80px;
  width:80px;
  margin:50% 0 0 50%;
  top:-30px;
  left:-30px;
  border-radius:50%;
  overflow:hidden;
}
/*2-2.loading圓環(huán)*/
.bgcircle::before{
  content:"";
  position:absolute;
  width:100%;
  height:100%;
  box-sizing:border-box;
  border:4px solid #BD50A3;
  border-top:4px solid transparent;
  border-radius:50%;
  -webkit-animation:circle-spining 4s infinite linear;
  animation:circle-spining 4s infinite linear;
  -webkit-transform-origin:50% 50% 0;
  transform-origin:50% 50% 0;
}
@keyframes circle-spining{
  0%{transform:rotate(0deg);}
  50%{transform:rotate(-180deg);}
  100%{transform:rotate(-360deg);}
}
@-webkit-keyframes circle-spining{
  0%{-webkit-transform:rotate(0deg);}
  50%{-webkit-transform:rotate(-180deg);}
  100%{-webkit-transform:rotate(-360deg);}
}

2.圓餅旋轉(zhuǎn):
 ÷馈(1)方法一:主要參考codepen網(wǎng)站中Geoffrey CrofteCSS Loaderdemo辑畦,其中也寫了一些其他loading效果⊥纫校總體來說纯出,這些loading效果的主要原理都是:在.bgcircle之下,設(shè)置.left敷燎、.right為左右半圓暂筝,拼接為一個圓餅,對.left硬贯,設(shè)置其子元素.spining往右移至.right區(qū)域焕襟,并形成半圓與.right區(qū)域重疊,此時只有.spining旋轉(zhuǎn)至.left區(qū)域時才能顯示出來澄成。同理胧洒,設(shè)置了.right的子元素.spining。最后墨状,對兩個.spining子元素設(shè)置不同的旋轉(zhuǎn)動畫已達(dá)到要求效果卫漫。css代碼過長,請見文末demo代碼地址肾砂,其旋轉(zhuǎn)過程如下步驟表述:

a.初始狀態(tài)下列赎,兩個.spining都沒有旋轉(zhuǎn)(圖中深紫色圓餅):此時.left.spining圍繞圓心開始逆時針旋轉(zhuǎn),至-180deg:

b.“.left.spining”圍繞圓心開始逆時針旋轉(zhuǎn)镐确,至-180deg(圖中淺紫色半圓):

c.“.left.spining”停止旋轉(zhuǎn)包吝,“.right.spining”開始旋轉(zhuǎn)至-180deg,此時兩個.spining都顯示出來了源葫,形成淺紫色圓餅:

d.“.right.spining”停止旋轉(zhuǎn)诗越,“.left.spining”又開始旋轉(zhuǎn),從-180deg旋轉(zhuǎn)至-360deg息堂,此時只剩下“.right.spining”形成的淺紫色右半圓:

e.“.left.spining”一周的旋轉(zhuǎn)動畫結(jié)束嚷狞,停止旋轉(zhuǎn);“.right.spining”開始最后半周的旋轉(zhuǎn)荣堰,至-360deg停止床未。整個一周的動畫結(jié)束。對此動畫設(shè)置無限循環(huán)次數(shù)振坚,即可達(dá)到最終效果薇搁。

(2)方法二:參考張鑫旭博客的文章CSS3實現(xiàn)雞蛋餅餅狀圖loading等待轉(zhuǎn)轉(zhuǎn)轉(zhuǎn),在張鑫旭前輩的這篇文章里渡八,利用比喻把他的方法原理表述的很清楚啃洋,簡單來說:他將動畫分成了兩半传货,如果以本文前面頁面圖中右邊的圓餅作為例子的話,前半動畫是深藍(lán)色由12點鐘位置開始逆時針旋轉(zhuǎn)至-360deg裂允,最后將橙色覆蓋损离;后半動畫剛好相反哥艇,橙色由12點鐘位置開始逆時針旋轉(zhuǎn)至-360deg绝编,最后將深藍(lán)色覆蓋。由于兩半部分動畫的過程是相同的貌踏,所以將前半部分動畫制作完成后十饥,將該動畫過程復(fù)制一份,將顏色對調(diào)祖乳,重新套入相同結(jié)構(gòu)的新元素中逗堵,再將新的一套重疊在舊一套元素所占區(qū)域,設(shè)置前半段時間第一套元素顯示眷昆、第二套元素透明蜒秤,后半段時間第二套元素顯示、第一套元素透明亚斋。這樣就完成了圓餅loading效果作媚。
下面以前半部分動畫為例表述下動畫過程:

首先需要了解html結(jié)構(gòu)(以本文開始所列html結(jié)構(gòu)為例),設(shè)置類名為inner的span作為父元素帅刊,該元素背景為深藍(lán)色纸泡,其下同列三個span作為子元素,類名分別為:spiner赖瞒、filler女揭、masker。以上四者中栏饮,按照原理吧兔,.filler、.masker的z-index應(yīng)該設(shè)置得高于.spiner袍嬉,但在實際設(shè)置中境蔼,張鑫旭前輩沒有設(shè)置z-index值,而是利用在html結(jié)構(gòu)中將需要優(yōu)先顯示的元素并列在后面的方式(如果在html結(jié)構(gòu)中將.masker與.spiner對調(diào)冬竟,就會出現(xiàn)錯誤)欧穴,規(guī)避了這點。.masker為左半圓泵殴,深藍(lán)色涮帘;.filler為右半圓,橙色笑诅;.spiner為旋轉(zhuǎn)半圓调缨,橙色疮鲫,初始位置位于左半部分。

a.初始狀態(tài):.masker透明弦叶,此時由.spiner和.filler分別位于左右方拼接成橙色圓餅:

b.此時俊犯,.spiner開始圍繞圓心逆時針旋轉(zhuǎn),則作為父元素的.inner開始從12點鐘方向逆時針顯露(深藍(lán)色)伤哺,到.spiner旋轉(zhuǎn)-180deg時燕侠,.masker由透明變?yōu)轱@示,.filler由顯示變?yōu)橥该鳎?/p>

c.之后立莉,.spiner繼續(xù)逆時針旋轉(zhuǎn)绢彤,由于.filler已經(jīng)透明,則.inner從6點鐘方向逆時針顯露蜓耻,而左半圓區(qū)域由于.masker已經(jīng)顯示(z-index值比.spiner大)茫舶,也為深藍(lán)色,這樣刹淌,當(dāng).spiner旋轉(zhuǎn)一周之后饶氏,就由橙色全部變?yōu)樗{(lán)色:

以上為動畫原理,css代碼過長有勾,請見文末demo代碼地址疹启。在實現(xiàn)這個方法的過程中,還需要注意柠衅,要變化透明度的元素(.inner/.inner2/.masker/.filler)皮仁,其透明度變化并不是漸變,而是突變菲宴,所以需要設(shè)置animation-timing-function為steps()突變曲線贷祈,steps(n,start/end)主要有兩個值,簡單來說喝峦,n設(shè)置突變次數(shù)(整數(shù))势誊,start/end設(shè)置在動畫開始還是結(jié)束突變。

思考:

1.利用steps()曲線谣蠢,可以制作一些更炫酷的css3動畫粟耻。并且,在同一個方向上連續(xù)漸變的動畫眉踱,由于漸變位置不同挤忙,通常需要兩個以上元素實現(xiàn),但利用steps()曲線突變位置谈喳,就能通過一個元素實現(xiàn)了册烈;
2.完成以上任務(wù)之后,可以優(yōu)化的地方:第一個方法中的.spining子元素婿禽,可以使用偽元素替代赏僧;同理大猛,第二個方法中的子元素,也可用偽元素替代淀零;
3.圓環(huán)除了定長旋轉(zhuǎn)挽绩,也可根據(jù)圓餅loading旋轉(zhuǎn)的方法,實現(xiàn)變長旋轉(zhuǎn)loading效果驾中。

具體參考已在文中引出唉堪,不再單列,以下為我的demo及demo代碼:

我的demo;
  demo代碼;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哀卫,一起剝皮案震驚了整個濱河市巨坊,隨后出現(xiàn)的幾起案子撬槽,更是在濱河造成了極大的恐慌此改,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侄柔,死亡現(xiàn)場離奇詭異共啃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)暂题,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門移剪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薪者,你說我怎么就攤上這事纵苛。” “怎么了言津?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵攻人,是天一觀的道長。 經(jīng)常有香客問我悬槽,道長怀吻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任初婆,我火速辦了婚禮蓬坡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘磅叛。我一直安慰自己屑咳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布弊琴。 她就那樣靜靜地躺著兆龙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪访雪。 梳的紋絲不亂的頭發(fā)上详瑞,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天掂林,我揣著相機(jī)與錄音,去河邊找鬼坝橡。 笑死泻帮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的计寇。 我是一名探鬼主播锣杂,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼番宁!你這毒婦竟也來了元莫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝶押,失蹤者是張志新(化名)和其女友劉穎踱蠢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棋电,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茎截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赶盔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片企锌。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖于未,靈堂內(nèi)的尸體忽然破棺而出撕攒,到底是詐尸還是另有隱情,我是刑警寧澤烘浦,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布抖坪,位于F島的核電站,受9級特大地震影響谎倔,放射性物質(zhì)發(fā)生泄漏柳击。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一片习、第九天 我趴在偏房一處隱蔽的房頂上張望捌肴。 院中可真熱鬧,春花似錦藕咏、人聲如沸状知。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饥悴。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間西设,已是汗流浹背瓣铣。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留贷揽,地道東北人棠笑。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像禽绪,于是被迫代替她去往敵國和親蓖救。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫印屁、插件循捺、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,121評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評論 25 707
  • 原文地址:→看過來 寫在前面 (附錄有源碼及效果) 之前碰到一個小練習(xí),就是用純CSS3來寫餅狀的loading效...
    樓心漫閱讀 3,233評論 10 29
  • 如果這樣真的算是失眠的話,已經(jīng)好多年柠衍。最喜歡深夜洋满。年少輕狂的時候,喜歡這種沒有偽裝虛妄的夜幕珍坊,肆意的享受著難得的自...
    Maxdiane閱讀 318評論 0 0
  • 2017.6.21寫簡書的第12天 前幾天在微博上看搞笑視屏,那個微博博主轉(zhuǎn)載了一篇文章正罢,標(biāo)題是習(xí)慣可以成就你也可...
    隔壁小志龍閱讀 320評論 0 1