最近學到了一個css的小動畫,在這裏分享給你們。css
時下最火的網絡遊戲當屬英雄聯盟了,此次分享的就是遊戲中技能CD倒計時的動畫。 效果以下圖所示html
看起來只有兩種顏色,但HTML中可不止兩個部分。下面是該動畫的結構圖。css3
看懂了這個結構圖,大體的動畫流程也就清晰了。git
爲了完成這個結構,咱們須要四個部分。 因此在HTML中這樣定義github
<div class="inner"><!--底部-->
<div id="cdTime"></div>
<div class="spiner"></div><!--旋轉體-->
<div class="masker"></div><!--蒙版1-->
<div class="filler"></div><!--蒙版2-->
</div>
複製代碼
1.inner
主要爲背景顏色(技能圖標),和技能框樣式(能夠方形,也能夠圓形)。
2.spiner
用來實現淺色部分旋轉(換句話說:減小深色部分)。
3.masker
左半圓形,固定在左邊,動畫後半段層級降低。
4.filler
右半圓形,固定在右邊,動畫後半段隱藏。bash
旋轉動畫以下:網絡
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
複製代碼
動畫前半段層級最高,後半段降低:ide
@keyframes second-half-show {
0% { z-index: 3; }/*數值根據狀況而定便可*/
50%,
100% { z-index: 0; }
}
複製代碼
動畫全半段顯示,後半段隱藏:svg
@keyframes second-half-hide {
0% { opacity: 1; }
50%,
100% { opacity: 0; }
}
複製代碼
inner
樣式:wordpress
.inner {
position: relative;
width: 100px;
height: 100px;
margin: 200px auto 0 auto;
background-color: rgb(201, 202, 202);
border:solid 1px;
overflow: hidden;
border-radius: 5px;
}
複製代碼
spiner
樣式:
.spiner {
position: absolute;
z-index: 1;
top: -50px;
left: -50px;
width: 100px;
height: 200px;
transform-origin: right ;
animation: spin 10s infinite linear;
border-radius: 100px 0 0 100px;
background-color: rgb(201, 202, 202);
}
複製代碼
masker
樣式:
.masker {
position: absolute;
left: -50px;
top: -50px;
width: 100px;
height: 200px;
border-radius: 100px 0px 0 100px;
background-color: rgb(121, 121, 121);
animation: second-half-show 10s steps(1, end) infinite;
}
複製代碼
filler
的樣式與masker
之對稱便可
由於動畫中的兩個蒙版的變化都是瞬間完成的,不能夠有漸變過程。因此
animation
中設置steps(1,end)
表示1幀完成。不懂steps
的話能夠參考animation中的steps()逐幀動畫
(數字的樣式很簡單,我就省略了)
JS顯示數字時間:
<script>
let CD = 10;
var cdTime = document.getElementById('cdTime');
cdTime.innerHTML = CD--;
setInterval(function () {
if (1 == CD) {
cdTime.innerHTML = CD;
let cdFloat = CD - 0.1;
const timeFloat = setInterval(function () {
cdTime.innerHTML = cdFloat.toFixed(1);
cdFloat -= 0.1;
if (cdFloat <= 0) {
clearInterval(timeFloat);
CD = 10;
}
}, 90)
} else {
cdTime.innerHTML = CD--;
}
}, 1000)
</script>
複製代碼
最後的1秒中,爲了防止兩個
setInterval
衝突,我將時間調整爲90ms一跳,錯開了0.1s
嗯,就分享到這裏吧~~~~
項目地址:CSS3-技能冷卻樣式
參考於張鑫旭:CSS3實現雞蛋餅餅狀圖loading等待轉轉轉