css做個波浪懸浮球的實現(xiàn)方法

最近公司項目有個需求是在網(wǎng)頁上操作虛擬機,emmm...操作就操作吧,誰讓是領(lǐng)導(dǎo)提的,咱也不知道,咱也不敢問啊....咋辦?搞吧,爬了n多個坑才終于把虛擬機功能給引入到項目中,看著熟悉的Linux操作窗口,都別攔我,讓我裝一會*
領(lǐng)導(dǎo)看了十分滿意,然后說...我看電腦上都有那個懸浮球,我們這也得有吧
???啥玩意???去他電腦上看了一下才發(fā)現(xiàn)是安全軟件的那個展示電腦使用情況的懸浮球,WTF!!你見過哪個Linux有這懸浮球的?你咋不讓我再給你整一只瑞星小獅子在旁邊給你跳舞呢??算了還是別說了,說了真讓我做怎么搞....
需求
需求說起來很簡單--》小球、懸浮在頁面最上層、內(nèi)部有波浪能動、波浪高度跟虛擬機使用情況有關(guān)、鼠標放上去展示詳細信息,大概就是醬嬸的
開搞
環(huán)境
項目使用的是vue框架,所以demo都是在vue環(huán)境下,不過代碼其實沒什么環(huán)境需求的。
設(shè)計思路
看到這個需求的第一想法就是用canvas畫一個懸浮球,這個倒也不難,網(wǎng)上挺多案例的,后面想能不能用css動畫試試?性能還能更好一下,畢竟在有虛擬機的頁面已經(jīng)是有點卡了,任何性能的提升都是有必要的。
主要實現(xiàn)原理就是使用一個不停運動的a遮在b塊上面,然后讓a的顏色與背景顏色相同,從而造成b的邊緣在不停波動的效果。
1.畫個大圓套小圓
<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>
然后我們得到了這個
2.畫遮蓋層并讓它扭起來
<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屬性影響的,所以要動態(tài)變更懸浮球狀態(tài)只需要計算然后相應(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>
看效果
大概就醬嬸了,第一次寫文,文筆不好多多見諒,別說我爛尾了,因為...我要下班了
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
CSS簡單實現(xiàn)網(wǎng)頁懸浮效果(對聯(lián)廣告)-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學(xué)網(wǎng)
css固定定位,即懸浮效果(例如對聯(lián)廣告),不用js,css中"position:fixed;"即可。 position:fixed; 以視口為包含塊,因此在瀏覽器窗口內(nèi)固定。 ie 6.0不支持,2008-10-17- 這篇文章主要介紹了純CSS實現(xiàn)DIV懸浮的示例代碼(固定位置),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一2021-01-07
- 這篇文章主要介紹了CSS 鼠標懸浮在圖片上添加遮罩層效果的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-17
- 這篇文章主要介紹了css實現(xiàn)懸浮客服效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-13
- 平時我們在瀏覽網(wǎng)頁時,如下圖的導(dǎo)航欄已經(jīng)屢見不鮮了,當鼠標放上去時,右側(cè)隱藏的內(nèi)容就會慢慢平滑展開,非常美觀且實用,今天小編通過本文給大家分享基于CSS實現(xiàn)網(wǎng)頁懸2023-02-13