如此简单的爱心加载特效,进来看一看吧

1,127 阅读4分钟

前言

这次给大家带来一款简单又炫酷的爱心加载特效,用通俗易懂的代码实现炫酷的特效,相信这是很多人都想做的事。接下来就跟随我的步伐来完成这个炫酷的特效吧。

效果预览

炫不炫酷大伙一看便知。

HTML结构

首先,我们来设计一下基础结构,相关代码如下所示。

<section>
        <div class="loader">
            <span style="--i: 1"></span>
            <span style="--i: 2"></span>
            <span style="--i: 3"></span>
            <span style="--i: 4"></span>
            ......
            此处span一直到--i:20
        </div>
    </section>

HTML中,使用section包裹一个具有loader类的<div>元素。这个<div>元素将包含用于创建加载动画的<span>元素。然后使用--i自定义属性来设置每个<span>元素的动画延迟,使得它们按照一定的顺序依次出现。通过设置不同的--i值,可以实现不同的动画效果。

整个加载动画的效果是,一系列的<span>元素以一定的间隔依次出现,形成一个连续的旋转动画,从而给用户呈现出正在加载的效果。

CSS设计

有了HTML结构,我们就可以往上面添砖加瓦了,开始设计样式。

section{
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    background: #042104;
    animation: animateBgColor 3s linear infinite;
}

section区块设置为弹性布局,使其内部元素可以方便地进行水平和垂直居中。然后应用一个名为animateBgColor的动画,持续时间为3秒,以线性方式进行变化,并且无限循环播放。总的来说,我们创建了一个占满整个屏幕的区块,

动画相关代码如下:

@keyframes animateBgColor {
    0%{
        filter: hue-rotate(0deg);
    }
    100%{
        filter: hue-rotate(300deg);
    }
}

在这个动画中,0%表示动画开始时的状态,100%表示动画结束时的状态。在0%的状态下,使用filter属性的hue-rotate()函数将背景色的色相设置为0度,即不进行任何色相旋转。

100%的状态下,使用filter属性的hue-rotate()函数将背景色的色相设置为300度,即将背景色按顺时针方向旋转300度。因此,该动画的整体效果是,元素的背景色会从初始状态开始,逐渐旋转到300度的色相,创建了一个颜色旋转的动画效果。

接下来就开始设置加载器的基本样式了。

.loader span{
    position: absolute;
    left: -200px;
    top: 0;
    width: 200px;
    height: 2px;
    transform-origin: right;
    transform: rotate(calc(18deg * var(--i)));
}

这里的基本属性不多解释,咱们直接看更复杂的属性。在这里使用transform旋转变换将加载器按照一定角度进行旋转,其中var(--i)是一个CSS自定义属性,表示加载器的索引,可以根据具体情况进行调整,calc(18deg * var(--i))表示将每个加载器都按照18度的倍数进行旋转。

最后就是加载动画的设计了。

.loader span::before{
    content: '';
    position: absolute;
    left: 0;
    width: 15px;
    height: 15px;
    background: #00ff0a;
    border-radius: 50%;
    animation: animate 2s linear infinite;
    box-shadow: 0 0 10px #00ff0a,
                0 0 20px #00ff0a,
                0 0 40px #00ff0a,
                0 0 80px #00ff0a,
                0 0 100px #00ff0a;
    animation-delay: calc(-0.1s * var(--i));
}

span元素之前插入一个伪元素。将伪元素的定位方式设置为绝对定位,设置伪元素的宽度和高度为15px,边框半径为50%,使其呈现圆形,即设计一个圆形。然后应用一个名为animate的动画效果,持续时间为2秒。接着为伪元素添加多个阴影效果,创建一个逐渐放大的光晕效果。最后设置动画延迟时间,根据--i变量的值计算延迟时间,实现多个加载球的错开效果。

下面是动画相关的代码。

@keyframes animate {
    0%{
        transform: translateX(0) scale(0.5);
    }
    50%{
        transform: translateX(200px) scale(1);
    }
    100%{
        transform: translateX(0) scale(0.5);
    }
}

在动画开始时0%,元素将会通过transform属性进行平移和缩放变换,translateX(0)表示水平方向上不进行平移,scale(0.5)表示元素的大小为原来的一半。

在动画进行到一半的时候50%,元素将会通过transform属性进行平移和缩放变换,translateX(200px)表示水平方向上平移200像素,scale(1)表示元素的大小保持不变。

在动画结束时100%,元素将会通过transform属性进行平移和缩放变换,translateX(0)表示水平方向上不进行平移,scale(0.5)表示元素的大小为原来的一半。

效果终览

完整代码可参考码上掘金。

总结

以上就是整个特效的实现过程了,代码简单,通俗易懂,但又不失炫酷效果,是一个值得多看多理解的特效。可以自己多练几遍,方便自己更好地理解,如果有什么问题随时在评论区告诉我~