一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情
我们先看下动画效果
动画分解
- 两个小球围绕中间的模糊球旋转
- 小球斜右上动画时,在透明球的上面
- 小球斜左下动画时,在透明球的下面
代码实现
html 部分
<div id="app">
<span></span>
<span></span>
<span></span>
</div>
css部分
模糊透明小球的实现
关键属性:
-
background: rgba(255, 255, 255, 0.05);// 确保背景有一定的透明度,才能看到模糊生效 -
backdrop-filter: blur(22px);// 高斯模糊 -
z-index: 2;// 实现环绕小球的上下位置的变化
旋转小球的实现
关键属性:
position: absolute;// 让小球脱离文档流transform: translate(-100px, 100px);// 让小球位于左下角animation: anima 2s 0 ease-in-out infinite; // 确保动画可以反复运行 注意看0
下面是动画的实现部分
@keyframes anima{
0% {
transform: translate(-100px, 100px) scale(0.5);
z-index: 3;
}
50% {
transform: translate(100px, -100px scale(0.5));
z-index: 3;
}
50.0001% {
transform: translate(100px, -100px) scale(0.5);
z-index: 1;
}
100% {
transform: translate(-100px, 100px) scale(0.5);
z-index: 1;
}
}
0% 至 50% 小球斜右上,此时小球的 z-index: 3,是要大于透明球的 z-index: , 所以会在透明球的上面经过, 50.001% 至 100%,小球斜左下,这时小球的 z-index: 1,是小于透明球的 z-index: 2, 所以会在透明球的下面经过,并因为高斯模糊和透明效果,看到穿过的过程.
环绕的小球两个相差了1s,可以利用 animation-delay的特性来实现,把值写为负数,在上面的代码,可以看到环绕球的nimation-duration:2s,所以让另一个环绕球,提前在1s的位置开始,
第二个小球的动画实现,animation: anima 2s -1s ease-in-out infinite;
提示:允许负值,-1s 使动画马上开始,但跳过 1 秒进入动画。