
花里胡哨的canvas實(shí)現(xiàn)太過(guò)于繁瑣,這就是本文存在的意義.
效果圖
拆解
首先畫(huà)一個(gè)簡(jiǎn)單的盒子:
利用::before與::after畫(huà)兩個(gè)圓角值(radius)不同的不規(guī)則圓形:
父元素設(shè)置overflow: hidden
最后加上animation動(dòng)畫(huà)讓兩個(gè)不規(guī)則圓形旋轉(zhuǎn)起來(lái)即可??
代碼
html
<div class="wave"></div>
scss
// 簡(jiǎn)單的盒子
.wave {
position: relative;
width: 150px;
height: 150px;
background-color: #5291e0;
overflow: hidden;
// 兩個(gè)不規(guī)則圓形(相對(duì)盒子進(jìn)行定位,距離底部距離則為波浪高度)
&::before,
&::after {
content: "";
position: absolute;
left: 50%;
bottom: 15%;
width: 500%;
height: 500%;
border-radius: 45%;
background-color: #fff;
transform: translateX(-50%); // 居中
animation: rotate 15s linear infinite;
}
// 其中一個(gè)不規(guī)則圓形調(diào)整一下樣式,以便區(qū)分(或者調(diào)整animation的參數(shù)來(lái)區(qū)分)
&::before {
bottom: 10%;
opacity: .5;
border-radius: 47%;
}
}
}
// 旋轉(zhuǎn)動(dòng)畫(huà)
@keyframes rotate {
from {
transform: translateX(-50%) rotateZ(0deg);
}
to {
transform: translateX(-50%) rotateZ(360deg);
}
}
總結(jié)
效果圖第一眼看上去,讓"藍(lán)色"部分動(dòng)起來(lái),真的很難,所以采用逆向思維,直接操控"白色"部分再來(lái)個(gè)overflow: hidden成功偷梁換柱,舒服得很??
最后
本文到此結(jié)束,希望以上內(nèi)容對(duì)你有些許幫助,如若喜歡請(qǐng)記得點(diǎn)個(gè)贊跟關(guān)注哦 ??
image
微信公眾號(hào)
「前端宇宙情報(bào)局」,將不定時(shí)更新最新、實(shí)用的前端技巧/技術(shù)性文章,歡迎關(guān)注,一起學(xué)習(xí) ??