手把手教你实现一个超简易音乐播放器

842 阅读3分钟

前言

借着前段时间完成了一个关于音乐播放器的项目,所以这次给大家带来一个关于音乐播放的效果。话不多说,大家直接看下面的动态效果预览。

效果预览

HTML 部分

首先看到HTML部分,HTML是整个效果实现的基建相关代码如下。

  <div class="loader">
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
    </div>

通过HTML定义了一个包含10span元素的div元素,每个span元素代表加载动画中的一个小块。通过为每个span元素设置不同的样式,可以实现旋转或者闪烁的效果,从而形成一个整体的加载动画。

CSS 部分

然后是 CSS 部分。这里的 CSS 就是为整个效果画龙点睛的,相关代码如下。

  body {
      margin: 0;
      height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .loader {
      width: 6em;
      height: 6em;
      padding: 3em;
      font-size: 10px;
      background-color: pink;
      border-radius: 50%;
      border: 0.8em solid hotpink;
      display: flex;
      align-items: center;
      justify-content: space-between;
      animation: loader-animate 1.5s infinite ease-in-out;
    }

在这里,body设置了页面的基本样式,包括将内容居中显示在页面中央。.loader类设置了加载动画的样式,包括宽度、高度、内边距、字体大小、背景颜色、边框样式、圆角、显示方式和动画效果。动画效果通过 @keyframes 定义的loader-animate动画实现,设置了1.5秒的动画时长,无限循环,并且采用ease-in-out的缓动函数。

接下来我们看到这段动画的实现方式,相关代码如下。

    @keyframes loader-animate {
      45%,
      55% {
        transform: scale(1.05);
      }
    }

这段代码定义了一个名为loader-animate的关键帧动画。在动画的 45%55% 的时间点,元素会发生缩放,transform属性值为scale(1.05),即放大1.05倍。这样在动画播放时,元素会在这两个时间点之间发生放大效果。

  .loader span {
      width: 0.5em;
      height: 50%;
      background-color: deeppink;
      animation: span-animate 1.5s infinite ease-in-out backwards;
      animation-delay: calc(var(--n) * 0.05s);
    }
    @keyframes span-animate {
      0%,
      100% {
        transform: scaleY(0.05) translateX(-0.5em);
      }

      15% {
        transform: scaleY(1.2) translateX(1em);
      }

      90%,
      100% {
        background-color: hotpink;
      }
    }

接下来又是一段动画代码。该动画效果使用了span-animate关键帧动画,定义了元素在不同时间点的变化。在动画中,元素在 0%100% 时高度缩小到0.05倍并向左偏移0.5em,在 15% 时高度变为1.2倍并向右偏移1em,最后在 90%100% 时背景颜色变为hotpink。通过这些变化在不同时间点的组合,可以实现一个有趣的loading动画效果。

  .loader span:nth-child(1) {
      --n: 1;
    }
    .loader span:nth-child(2) {
      --n: 2;
    }
    .loader span:nth-child(3) {
      --n: 3;
    }
 ......
 以下代码省略

这里是为了给一个包含多个span元素的 .loader 元素下的每个span元素设置一个自定义属性 --n 的值。通过 :nth-child() 选择器,分别为每个span元素设置不同的 --n 值,从110。这样可以在后续的CSS样式中使用 --n 值来对每个span元素进行不同的样式设置。

最后就是

总结

以上就是整个效果的实现过程了,代码简单易懂。另外,感兴趣的小伙伴们还可以在现有基础上发散思维,比如增加点其他效果,或者更改颜色等等。关于该效果如果大家有更好的想法欢迎在评论区分享,互相学习。最后,完整代码在码上掘金里可以查看,如果有什么问题大家在评论区里讨论~