css做個(gè)波浪懸浮球的實(shí)現(xiàn)方法
最近公司項(xiàng)目有個(gè)需求是在網(wǎng)頁(yè)上操作虛擬機(jī),emmm...操作就操作吧,誰(shuí)讓是領(lǐng)導(dǎo)提的,咱也不知道,咱也不敢問(wèn)啊....咋辦?搞吧,爬了n多個(gè)坑才終于把虛擬機(jī)功能給引入到項(xiàng)目中,看著熟悉的Linux操作窗口,都別攔我,讓我裝一會(huì)*
領(lǐng)導(dǎo)看了十分滿(mǎn)意,然后說(shuō)...我看電腦上都有那個(gè)懸浮球,我們這也得有吧
???啥玩意???去他電腦上看了一下才發(fā)現(xiàn)是安全軟件的那個(gè)展示電腦使用情況的懸浮球,WTF!!你見(jiàn)過(guò)哪個(gè)Linux有這懸浮球的?你咋不讓我再給你整一只瑞星小獅子在旁邊給你跳舞呢??算了還是別說(shuō)了,說(shuō)了真讓我做怎么搞....
需求
需求說(shuō)起來(lái)很簡(jiǎn)單--》小球、懸浮在頁(yè)面最上層、內(nèi)部有波浪能動(dòng)、波浪高度跟虛擬機(jī)使用情況有關(guān)、鼠標(biāo)放上去展示詳細(xì)信息,大概就是醬嬸的
開(kāi)搞
環(huán)境
項(xiàng)目使用的是vue框架,所以demo都是在vue環(huán)境下,不過(guò)代碼其實(shí)沒(méi)什么環(huán)境需求的。
設(shè)計(jì)思路
看到這個(gè)需求的第一想法就是用canvas畫(huà)一個(gè)懸浮球,這個(gè)倒也不難,網(wǎng)上挺多案例的,后面想能不能用css動(dòng)畫(huà)試試?性能還能更好一下,畢竟在有虛擬機(jī)的頁(yè)面已經(jīng)是有點(diǎn)卡了,任何性能的提升都是有必要的。
主要實(shí)現(xiàn)原理就是使用一個(gè)不停運(yùn)動(dòng)的a遮在b塊上面,然后讓a的顏色與背景顏色相同,從而造成b的邊緣在不停波動(dòng)的效果。
1.畫(huà)個(gè)大圓套小圓
<div class="container">
<div class="wave"></div>
</div>
<style>
.container {
width: 100px;
height: 100px;
border-radius: 50%;
border: 3px solid #67c23a;
background: #ffffff;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 5px;
}
.wave {
position: relative;
width: 100px;
height: 100px;
background-image: linear-gradient(-180deg, #aaff80 13%, #67c23a 91%);
border-radius: 50%;
}
</style>
然后我們得到了這個(gè)
2.畫(huà)遮蓋層并讓它扭起來(lái)
<div class="container">
<div class="wave"></div>
<div class="wave-mask"></div>
</div>
<style>
.wave-mask {
position: absolute;
width: 200px;
height: 200px;
top: 0;
left: 50%;
border-radius: 40%;
background-color: rgba(212, 24, 24, 0.9);
transform: translate(-50%, -70%) rotate(0);
animation: toRotate 10s linear -5s infinite;
z-index: 20;
}
@keyframes toRotate {
50% {
transform: translate(-50%, -70%) rotate(180deg);
}
100% {
transform: translate(-50%, -70%) rotate(360deg);
}
}
</style>
然后就變成了這樣(為了看的效果更好,原諒我使用的大紅色)
3.裁剪
.container {
overflow: hidden;
}
.wave-mask {
background-color: rgba(255, 255, 255, 0.9);
}
成品就醬嬸的了
4.完善
波浪的高度完全是受wave-mask的top屬性影響的,所以要?jiǎng)討B(tài)變更懸浮球狀態(tài)只需要計(jì)算然后相應(yīng)的改變top的值就可以了,然后稍微完善一下代碼
<template>
<div class="home">
<div class="container" :class="{ warning: parseInt(usingRate) > 60, danger: parseInt(usingRate) > 80 }">
<div class="wave"></div>
<div class="wave-mask" :style="`top: ${40 - parseInt(usingRate)}px`"></div>
</div>
<div class="using-slider">
<span>使用率:{{usingRate}} %</span>
<el-slider v-model="usingRate"></el-slider>
</div>
</div>
</template>
<script>
export default {
data () {
return {
usingRate: 0
}
}
}
</script>
<style lang="scss" scoped>
.container {
width: 100px;
height: 100px;
border-radius: 50%;
border: 3px solid #67c23a;
background: #ffffff;
overflow: hidden;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 5px;
.wave {
position: relative;
width: 100px;
height: 100px;
background-image: linear-gradient(-180deg, #aaff80 13%, #67c23a 91%);
border-radius: 50%;
}
.wave-mask {
position: absolute;
width: 200px;
height: 200px;
top: 0;
left: 50%;
border-radius: 40%;
background-color: rgba(255, 255, 255, 0.9);
transform: translate(-50%, -70%) rotate(0);
animation: toRotate 10s linear -5s infinite;
z-index: 20;
}
&.warning {
border: 3px solid #e6a23c;
.wave {
background-image: linear-gradient(-180deg, #f0c78a 13%, #e6a23c 91%);
}
&.danger {
border: 3px solid #f56c6c;
.wave {
background-image: linear-gradient(-180deg, #f78989 13%, #f56c6c 91%);
}
}
}
}
.using-slider {
width: 400px;
margin: 0 auto;
}
@keyframes toRotate {
50% {
transform: translate(-50%, -70%) rotate(180deg);
}
100% {
transform: translate(-50%, -70%) rotate(360deg);
}
}
</style>
看效果

大概就醬嬸了,第一次寫(xiě)文,文筆不好多多見(jiàn)諒,別說(shuō)我爛尾了,因?yàn)?..我要下班了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
- css固定定位,即懸浮效果(例如對(duì)聯(lián)廣告),不用js,css中"position:fixed;"即可。 position:fixed; 以視口為包含塊,因此在瀏覽器窗口內(nèi)固定。 ie 6.0不支持,2008-10-17

純CSS實(shí)現(xiàn)DIV懸浮的示例代碼(固定位置)
這篇文章主要介紹了純CSS實(shí)現(xiàn)DIV懸浮的示例代碼(固定位置),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一2021-01-07
CSS 鼠標(biāo)懸浮在圖片上添加遮罩層效果的實(shí)現(xiàn)
這篇文章主要介紹了CSS 鼠標(biāo)懸浮在圖片上添加遮罩層效果的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-17
這篇文章主要介紹了css實(shí)現(xiàn)懸浮客服效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-13
基于CSS實(shí)現(xiàn)網(wǎng)頁(yè)懸浮菜單效果
平時(shí)我們?cè)跒g覽網(wǎng)頁(yè)時(shí),如下圖的導(dǎo)航欄已經(jīng)屢見(jiàn)不鮮了,當(dāng)鼠標(biāo)放上去時(shí),右側(cè)隱藏的內(nèi)容就會(huì)慢慢平滑展開(kāi),非常美觀(guān)且實(shí)用,今天小編通過(guò)本文給大家分享基于CSS實(shí)現(xiàn)網(wǎng)頁(yè)懸2023-02-13




