通常loading動畫都是使用圖片,其實簡單的loading動畫用css就可以完全做到。
先上程式碼
html
<div class="loading">
<div class="left"></div>
<div class="right"></div>
</div>
複製程式碼
css
.loading {
width: 100px;
height: 100px;
position: fixed;
display: flex;
border-radius: 50%;
overflow: hidden;
-webkit-mask: radial-gradient(transparent 55%, #000 55%);
animation: rotate 1s linear infinite;
}
.left {
width: 50%;
height: 100%;
background: linear-gradient(rgb(2, 211, 248), rgba(2, 211, 248, .5))
}
.right {
width: 50%;
height: 100%;
background: linear-gradient(rgba(0, 0, 0, 0), rgba(2, 211, 248, .5));
}
@keyframes rotate {
0% {
transform: rotateZ(0);
}
100% {
transform: rotateZ(360deg);
}
}
複製程式碼
最終效果

原理也很簡單,就是利用css3漸變和mask遮罩,來製作這個效果。
首先使用線性漸變linear-gradient,左邊半塊從上到下,透明度1漸變到0.5,右邊半塊從上到下,透明度0漸變到0.5,大致是下面這個樣子

利用這個原理,我們可以製作更多有趣的loading動畫。
稍微改變一下,就會有各種效果
// .left
background: linear-gradient(rgb(255, 255, 255), rgb(0, 0, 0));
// .right
background: linear-gradient(rgb(255, 255, 255), rgb(0, 0, 0));
複製程式碼

// .left
background: linear-gradient(rgb(255, 0, 0), rgb(0, 255, 0) 33%, rgb(0, 255, 255) 66%, rgb(0, 0, 255) 100%);
// .right
background: linear-gradient(rgb(255, 0, 0), rgb(255, 0, 255) 50%, rgb(0, 0, 255), 100%);
複製程式碼

更多有趣的效果,需要自己去探索。