手把手教你用JS+CSS实现一堆泡泡

1,360 阅读4分钟

前言

前面带着大家实了一个冒泡加载,这回给大家又带来一个名字和泡泡有关的效果——泡泡特效。顾名思义,就是可以产生很多泡泡的效果。话不多说,咱们直接看效果

码上掘金

接下来咱们进入正题。

JS部分

实现这个效果,除了要用基本的CSS样式,还需要一部分的JS代码才可以。接下来就是带大家实现关于该效果的JS部分。

  <script>
        function createBubble(){
            const section = document.querySelector('section')
            const createElement = document.createElement('span')
            let size = Math.random()*60
            createElement.style.width =20+ size + 'px'
            createElement.style.height =20+ size + 'px'
            createElement.style.left = Math.random()*innerWidth + 'px'
            section.append(createElement)
            setTimeout(()=>{
                createElement.remove()
            },4000)
        }
        setInterval(createBubble,50)
    </script>

首先,代码定义了一个名为createBubble的函数。该函数用于创建气泡,并将其添加到网页中的一个section元素中。在函数内部,首先通过querySelector方法选取了一个section元素,并将其赋值给一个名为section的变量。

接下来,代码使用createElement方法创建了一个span元素,并将其赋值给一个名为createElement的变量。

然后,代码生成了一个随机数,并将其乘以60,得到一个随机的大小值。然后,代码将该大小值加上20,并将结果赋值给createElement元素的widthheight属性,以设置气泡的宽度和高度。代码还生成了一个随机的left值,并将其赋值给createElement元素的left属性,以设置气泡的水平位置。

接下来,代码使用append方法将createElement元素添加到section元素中,以显示气泡。

最后,代码使用setTimeout方法,在4秒后将createElement元素从section元素中删除,以实现气泡的消失效果。最后一行代码使用setInterval方法,每50毫秒调用一次createBubble函数,以持续创建气泡,实现气泡效果的动画。

CSS部分

接下来就是为在JS中新创建的元素span添加样式了。我们首先来看一个全屏元素section的样式设置。

section{
    width: 100%;
    height: 100vh;
    ......
    display: flex;
    ......
}

HTML部分,创建了一个全屏的section元素,它是一个占满整个视口的容器,背景为黑色,其中的内容会垂直和水平居中显示。

接下来就是span元素的样式了,span元素是一个圆形的背景元素,位于section元素的底部。它有一个背景渐变效果,从白色逐渐变为透明。span元素通过动画效果在4秒内从底部向上移动,并逐渐消失。相关代码如下。

section span{
    ......
    box-shadow: inset 0 0 10px rgba(255, 255, 255, 0.5);
    animation: animate 4s linear infinite;
}
section span::before{
    content: '';
    ......
    transform: scale(0.25) translate(-70%,-70%);
    background: radial-gradient(#fff,transparent);
    border-radius: 50%;
}

比较常见或者基础的样式这里就不占用过长篇幅,这里主要介绍一下比较关键的几个属性。通过box-shadow: inset 0 0 10px rgba(255, 255, 255, 0.5)设置元素的内阴影效果,使其呈现浅色阴影。再通过animation: animate 4s linear infinite为元素添加动画效果,该动画的编写后面会提到。

接下来就是为span添加伪元素了。content: ''设置伪元素的内容为空,该属性是伪元素里必不可少的一项。然后通过 transform: scale(0.25) translate(-70%,-70%)对伪元素进行缩放和平移变换,使其缩小为原来的0.25倍,并向左上方平移70% 的宽度和高度。最后给伪元素设置一个背景为径向渐变,颜色从白色到透明,并且使其呈现圆形,这里就是泡泡从01的形成过程了。

最后就是关于动画的设置部分,相关代码如下。

@keyframes animate {
    0%{
        transform: translateY(0%);
        opacity: 1;
    }
    0%{
        transform: translateY(0%);
        opacity: 1;
    }
    100%{
        transform: translateY(-1200%);
        opacity: 0;
    }
}

我们定义了一个名为animate的关键帧动画。该动画从0%100% 的时间范围内,通过transform属性和opacity属性来改变元素的位置和透明度。

0% 的时候,元素的transform属性设置为translateY(0%),表示元素在垂直方向上不发生位移,opacity属性设置为1,表示完全不透明。

100% 的时候,元素的transform属性设置为translateY(-1200%),表示元素在垂直方向上向上移动了1200% 的高度,即向上消失,opacity属性设置为0,表示完全透明。

通过将这些关键帧动画的样式定义在@keyframes规则中,可以在实际使用时将其应用于元素,使元素按照定义的样式变化进行动画效果。

总结

以上就是泡泡特效的实现过程了,在代码中既有CSS样式的处理,也有JS逻辑的部分,可以值得学习一下,感兴趣的同学可以在码上掘金中查看完整代码。