用純CSS實(shí)現(xiàn)餅狀Loading等待圖效果
寫在前面
之前碰到一個(gè)小練習(xí),就是用純CSS3來(lái)寫餅狀的loading效果,之前著實(shí)沒(méi)有寫過(guò)這玩意兒,小花完全沒(méi)頭緒,然后參考了張?chǎng)涡窭蠋煹腃SS3實(shí)現(xiàn)雞蛋餅餅狀圖loading等待轉(zhuǎn)轉(zhuǎn)轉(zhuǎn),還有些別的東西,用一種看起來(lái)有一點(diǎn)類似但是好像又不一樣的方式完成了同樣的效果,題目要求的大概就是這個(gè)樣子:

開(kāi)始
琢磨了一下,睡一覺(jué)起來(lái)畫了個(gè)圖,理順了一下,不過(guò)感覺(jué)此圖有點(diǎn)難意會(huì)啊啊啊啊啊,沒(méi)關(guān)系,小花會(huì)在后文一點(diǎn)一點(diǎn)解釋噠~(紅跟粉代表顏色,斜杠后面是z-index的值)

原理
這個(gè)東西分為兩部分:外圈和內(nèi)圓。顏色這東西都自定義啦,不過(guò)我畫的的圈圈好像有點(diǎn)太大,然后動(dòng)畫時(shí)間是隨便設(shè)的,反正轉(zhuǎn)起來(lái)看著感覺(jué)有點(diǎn)怪怪的額
先上html結(jié)構(gòu)
<div class="con-wrap">
<!--外圈-->
<div class="out-round"></div>
<!--內(nèi)圓,里面有半圓四個(gè)-->
<div class="in-round">
<div class="lt-round"></div>
<div class="lt-mask"></div>
<div class="rt-round"></div>
<div class="rt-mask"></div>
</div>
</div>
外圈和內(nèi)圓是通過(guò)position定位重合在一起,實(shí)質(zhì)上外圈轉(zhuǎn)完2圈,內(nèi)圓的紅色和粉色才各轉(zhuǎn)完1圈(內(nèi)圓的全程包括紅色從1到0、粉色從1到0),所以內(nèi)圓的動(dòng)畫時(shí)間應(yīng)該是外圈的兩倍?。?!
1、外圈
外圈很簡(jiǎn)單,設(shè)置border-radius:50%即可畫出一個(gè)圓,然后設(shè)置三條邊框?yàn)榧t色,另外一條為透明,即畫出了四分之三個(gè)圓邊框(即外圓)。
.out-round {
width: 100px;
height: 100px;
border-radius: 50%;
margin: 150px auto;
border: 3px solid #FF298C;
border-left: 3px solid transparent;
animation: outRound 1s linear infinite running;
}
接下來(lái)是外圈的動(dòng)畫,為其設(shè)置的動(dòng)畫就是旋轉(zhuǎn)一圈,infinite表示無(wú)限次
@keyframes outRound {
0% {
transform: rotate(120deg)
}
100% {
transform: rotate(-240deg)
}
}
其中rotate(120deg)為旋轉(zhuǎn)起始位置,可根據(jù)實(shí)際情況調(diào)整。
至此外圈就完成了,比較麻煩的是下面的內(nèi)圓,不過(guò)根據(jù)圖示應(yīng)該是可以想象的。
2.內(nèi)圓
此處有四個(gè)半圓,左邊兩個(gè),右邊兩個(gè)(round為紅色,mask為粉色),動(dòng)畫主要通過(guò)改變兩個(gè)紅色半圓的z-index值來(lái)控制各個(gè)半圓顯示的優(yōu)先順序。內(nèi)圓的css實(shí)現(xiàn)部分為:
/*左邊兩個(gè)半圓*/
.lt-round, .lt-mask {
position: absolute;
width: 35px;
height: 70px;
border-radius: 35px 0 0 35px;
transform-origin: right center;
}
/*右邊兩個(gè)半圓*/
.rt-round, .rt-mask {
position: absolute;
left: 50%;
width: 35px;
height: 70px;
border-radius: 0 35px 35px 0;
}
下面過(guò)程描述內(nèi)圓的動(dòng)畫全程(其中右邊的粉色全程不需要?jiǎng)樱疫吋t色部分只需要改變z-index的值來(lái)改變顯示的優(yōu)先級(jí),從而實(shí)現(xiàn)顯示和隱藏的效果來(lái)配合補(bǔ)充左半邊的圓。):
1、初始設(shè)置:
紅左 z-index:3 粉1 z-index:2 紅右 z-index:1 粉2 z-index:0
模型圖:

視覺(jué)效果圖(忽略中間的白線):
2.左邊紅色旋轉(zhuǎn)完180度時(shí)(逆時(shí)針旋轉(zhuǎn)所以是360→180→0)
模型圖:

視覺(jué)效果圖:

3.左邊紅色轉(zhuǎn)完到0度時(shí)(此時(shí)左右兩邊的紅色半圓被粉色覆蓋)
模型圖:
視覺(jué)效果圖:

4.粉色半圓重復(fù)之前紅色半圓的動(dòng)畫(即左邊粉色360→180→0)
模型圖:

視覺(jué)效果圖:
5.當(dāng)左邊粉色旋轉(zhuǎn)到0度時(shí),全部半圓回到了最初始的狀態(tài),整個(gè)動(dòng)畫即完成(在相同時(shí)間下外圈完成了2次的動(dòng)畫)。
模型圖:
視覺(jué)效果圖:
動(dòng)畫代碼部分
1、前半程為左邊紅色旋轉(zhuǎn)一周,后半程為粉色旋轉(zhuǎn)一周。動(dòng)畫實(shí)現(xiàn)如下:
/*左邊紅色完成第一圈的旋轉(zhuǎn)*/
@keyframes ltRound {
0% {
transform: rotate(360deg);
}
24.9% {
z-index: 3;
}
25% {
z-index: 1;
transform: rotate(180deg);
}
50% {
transform: rotate(0deg);
}
74.9% {
z-index: 1;
}
75%, 100% {
z-index: 3;
}
}
/*右邊紅色圓通過(guò)z-index來(lái)控制顯示和隱藏,從而達(dá)到在適當(dāng)時(shí)間配上左半圓的效果*/
@keyframes rtRound {
0%, 24.9% {
z-index: 1;
}
25% {
z-index: -3;
}
74.9% {
z-index: -3;
}
75%, 100% {
z-index: 1;
}
}
/*左邊粉色完成第二圈的旋轉(zhuǎn)*/
@keyframes ltMask {
0%, 25%, 50% {
transform: rotate(360deg);
}
75% {
transform: rotate(180deg);
}
100% {
transform: rotate(0deg);
}
}
2.在全部代碼未完成時(shí),可以將動(dòng)畫時(shí)間設(shè)大一點(diǎn),這樣便于觀察,搞完了再設(shè)回去就OK了。
3.由于動(dòng)畫是勻速變化的,但是z-index的值不能勻速變化,所以只能在某個(gè)很短時(shí)間內(nèi)去改變z-index的值。這樣才能達(dá)到效果(突然感覺(jué)這種實(shí)現(xiàn)好像也不是很好)
小結(jié)
沒(méi)做兼容,在chrome中無(wú)異常,別的我就不太知道了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章

CSS 實(shí)現(xiàn)各種 Loading 效果附帶解析過(guò)程
這篇文章主要介紹了CSS 實(shí)現(xiàn)各種 Loading 效果附帶解析過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-19
CSS loading效果之 吃豆人的實(shí)現(xiàn)
這篇文章主要介紹了CSS loading效果之 吃豆人的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)2019-09-09
CSS3動(dòng)畫之DIY Loading動(dòng)畫
這篇文章主要介紹了CSS3動(dòng)畫之DIY Loading動(dòng)畫的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-27- 這是一款基于css3齒輪loading動(dòng)畫特效,使用font-awesome字體圖標(biāo)的齒輪圖標(biāo)作為圖案,通過(guò)CSS3 animation來(lái)制作三個(gè)齒輪的運(yùn)動(dòng)效果。感興趣的朋友跟隨小編一起看看吧2018-09-27

CSS實(shí)現(xiàn)一個(gè)簡(jiǎn)單loading動(dòng)畫效果
CSS的animation可以做出大多數(shù)的loading效果,今天腳本之家小編給大家?guī)?lái)了基于CSS實(shí)現(xiàn)一個(gè)簡(jiǎn)單loading動(dòng)畫效果,非常不錯(cuò),需要的朋友參考下吧2018-04-17
本篇文章主要介紹了一份純CSS loading效果代碼示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-16使用CSS時(shí)間打點(diǎn)的Loading效果的教程
這篇文章主要介紹了使用CSS時(shí)間打點(diǎn)的Loading效果的教程,分別是基于box-shadow和基于border+background的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下2015-06-08- 這篇文章主要為大家介紹了css實(shí)現(xiàn)葉子形狀loading效果的方法,通過(guò)修改border-radius的參數(shù)實(shí)現(xiàn)的該效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-30

純CSS實(shí)現(xiàn)loading加載中效果(多種展現(xiàn)形式)
現(xiàn)如今網(wǎng)頁(yè)越來(lái)越趨近于動(dòng)畫,相信大家平時(shí)瀏覽網(wǎng)頁(yè)或多或少都能看到一些動(dòng)畫效果,今天我們來(lái)做一個(gè)有意思的動(dòng)畫效果,純 css 實(shí)現(xiàn) loading 加載中(多種展現(xiàn)形式),下面2023-02-08







