CSS动效合集之实现气泡发散动画,速速来Get吧~
文末分享源代码。记得点赞+关注+收藏!
const bubbles = ref([
{
w: 8,
x: 10,
},
{
w: 9,
x: 50,
},
{
w: 4,
x: 30,
},
{
w: 5,
x: 80,
},
{
w: 4,
x: 30,
},
{
w: 4,
x: 70,
},
{
w: 6,
x: 20,
},
{
w: 8,
x: 50,
},
{
w: 4,
x: 60,
},
{
w: 6,
x: 65,
},
]);
section {
height: 300px;
width: 300px;
margin: 50px auto;
position: relative;
z-index: 1;
border-radius: 20px;
box-shadow: 0px 9px 17px 4px rgba(0, 0, 0, 0.5);
}
.bubble {
position: absolute;
width: calc(1px * var(--w));
height: calc(1px * var(--w)); border-radius: 50%;
left: calc(50% - calc(1px * calc(var(--w) / 2)));
bottom: 10%;
background: pink;
}
.bubble {
+ animation: rise 3s infinite linear;
}
@keyframes rise {
0% {
left: calc(50% - calc(1px * calc(var(--w) / 2)));
opacity: 0;
bottom: 10%;
}
50% {
opacity: 0.8;
}
100% {
left: calc(1% * var(--x));
bottom: 90%;
opacity: 0;
}
}
.bubble {
+ animation-delay: calc(600ms * var(--d));
}
.bubble {
+ opacity: 0;
}
colors: {
type: Array,
default: () => ["#00BABC", "#009FA4", "#00FFC0"],
},
bubbles.value.forEach((i, index) => {
i.c = props.colors[index]
});
那么随之而来一个问题,当bubbles数据过多,colors不够用怎么解决?
当colors不够用时候,就从colors的第一项继续赋值
定义一个循环取值的方法
/**
* 根据索引循环取数值的值,取模运算符(%)来实现循环取数组的值
* @param {*} array
* @param {*} sort
* @returns
*/
export const forArrayValue = (array, sort) => {
return array[sort % array.length];
};
bubbles.value.forEach((i, index) => {
i.c = forArrayValue(props.colors, index);
});
.bubble {
+ background: var(--c);
}
.bubbles {
+ z-index: -1;
+ overflow: hidden;
}