滴..滴滴..滴滴滴,讀取完成!
今天我們來實作Day #4
我們在讀取網頁期間,常會看到不同的讀取畫面,雖然讀取有可能讓人厭煩,但看到漂亮的loading畫面,好像就輕鬆了些 ~ 那就讓我們開始吧!
CodePen: https://codepen.io/stevetanus/pen/OJZXZwW
<div class="frame">
<div class="center">
<div class="circle1"></div>
<div class="circle2"></div>
<div class="circle3"></div>
</div>
</div>
這個作品需要三個圓圈圈,.circle1
、circle2
、circle3
。
.frame {
width: 400px;
height: 400px;
position: absolute;
.center {
position: absolute;
top: 100px;
left: 100px;
...}
}
我們將.center
定位在.frame
的(100,100)的位置。
.circle1 {
position: absolute;
top: 85px;
left: 85px;
width: 30px;
height: 30px;
border-radius: 50%;
z-index: 3;
因為.frame
的寬度為400px,在.center
往右往下推100px之下,我們在.circle1
往右往下推85px,加上圓圈的半徑15px,剛好固定.circle1
在畫布中心。z-index: 3
(z3)使.circle1
成為最上面的圓圈。
.circle2 {
position: absolute;
left: 75px;
top: 75px;
width: 50px;
height: 50px;
z-index: 2;
...}
.circle3 {
position: absolute;
width: 80px;
height: 80px;
top: 60px;
left: 60px;
z-index: 1;
...}
.circle2
和.circle3
分別為半徑25px、半徑40px的圓圈,跟上面一樣的方法置中,z-index
分別設為2跟1。
現在的圖形大概長成這樣:
在此作品中,三個圓圈的動畫大致相同,在box-shadow
和scale
產生變化:
@keyframes jump-jump-1 {
0%,
70% {
box-shadow: 2px 2px 3px 2px rgba(0, 0, 0, 0.2);
transform: scale(0);
}
100% {
box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3);
transform: scale(1);
}
}
@keyframes jump-jump-2 {
0%,
40% {
box-shadow: 2px 2px 3px 2px rgba(0, 0, 0, 0.2);
transform: scale(0);
}
100% {
box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3);
transform: scale(1);
}
}
@keyframes jump-jump-3 {
0%,
10% {
box-shadow: 2px 2px 3px 2px rgba(0, 0, 0, 0.2);
transform: scale(0);
}
100% {
box-shadow: 10px 10px 15px 0 rgba(0, 0, 0, 0.3);
transform: scale(1);
}
}
可以看到差別在於開始動畫的時刻,.circle1
為70%,.circle2
為40%,.circle3
為10%,因此.circle3
最先scale(1)且陰影放大,再來.circle2
,最後.circle3
。
我們看到圓圈套用的動畫:
.circle1 {
animation: jump-jump-1 2s $bezier infinite alternate;
...}
.circle2 {
animation: jump-jump-2 2s $bezier infinite alternate;
...}
.circle3 {
animation: jump-jump-3 2s $bezier infinite alternate;
...}
在animation
的最後都加上了alternate
,這是animate-direction: alternate
的縮寫,讓動畫正向跑完之後會反向進行,而infinite
使得動畫會無限輪迴地進行(animation-iteration-count: infinite;
)。
$bezier: cubic-bezier(0.21, 0.98, 0.6, 0.99);
https://cubic-bezier.com/#.21,.98,.6,.99
此動畫速度跟ease-in-out
很像,中間快速變化,特別強調開始與結束的效果,配上alternate的屬性,使作品停留在滿圓圈的效果十分顯著。
CSS
目標 | 屬性 |
---|---|
動畫方向 | animation-direction: alternate |
圓形置中 | left, right (考量半徑) |
動畫放大 | box-shadow, scale |
今天是風雨交加的颱風天,就算提早了半小時出門,搭上了公車,卻還是感覺到交通比平常更為阻塞呢 ~ 下班後吃著麥當勞繼續寫文章。