【Sass&Vue】仿网易云播放器动画

简介

仿网易云播放动画

效果图(效果图)


最终成品效果


动画组件

src/components/music/MusicPlayAnimate.vue

html 复制代码
<template>
  <div class="music-play">
    <div></div>
    <div></div>
    <div></div>
  </div>
</template>

<script setup>
const props = defineProps({
  state: {
    type: Boolean,
    default: true,
  },
  color: {
    type: String,
    default: "blue",
  },
});
</script>

<style lang="sass" scoped>
// TODO 音乐播放器动画
//  ? 动画停止class >>> .muscic-play-stop
// HTML结构
// <div class="music-play">
//     <div></div>
//     <div></div>
//     <div></div>
// </div>

$music-play-box-height: 20px//音乐播放状态高度
$music-play-width: 3.2px//音乐播放状态宽度
$music-play-delys: .5s//音乐播放状态动画延迟
$music-play-gap: 6px//音乐播放状态间距
$music-animate-time: .75s//动画播放时长
$music-play-radius: 4px 4px 0 0 //圆角
$music-play-pos: center bottom//动画位置

.music-play
    display: inline-block
    width: calc(#{$music-play-width * 3 + $music-play-gap })
    position: relative
    height: $music-play-box-height

.music-play>div
    position: absolute
    width: $music-play-width
    height: 100%
    border-radius: $music-play-radius
    animation: music-play-an #{$music-animate-time} linear infinite
    transform-origin: $music-play-pos
    animation-play-state: v-bind('props.state===true?"running":"paused"')
    background: v-bind('props.color')

@for $i from 1 through 3
    .music-play>div:nth-child(#{$i})
        animation-delay: calc(#{($i - 1) * $music-play-delys})
        margin-left: calc(#{$music-play-gap * ($i - 1)})

@keyframes music-play-an
    0%,
    100%
        transform: scaleY(1)

    50%
        transform: scaleY(0)
</style>

使用组件

src/Views/HomeView.vue

html 复制代码
<template>
    <div
       style="
         display: flex;
         flex-direction: column;
         gap: 20px;
         width: 100px;
         margin: 20px;
       "
     >

       <button @click="test1">播放</button>
       
       <music-play-animate :state="musicPlay" color="red" />
       <music-play-animate :state="musicPlay" /> 
       
     </div>
</template>

<script setup>
import { ref } from "vue"; 
import MusicPlayAnimate from "../components/music/MusicPlayAnimate.vue";

const musicPlay = ref(true),
  test1 = () => {
    musicPlay.value = !musicPlay.value;
    console.log(musicPlay.value);
  };
</script>
相关推荐
sunly_10 小时前
TypeScript总结:15、类型速查
前端·javascript·typescript
Brown.alexis10 小时前
es6知识点3-自备使用
前端·javascript·es6
2601_9539880710 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·后端·物联网·tcp/ip·数学建模·前端框架
天空之城--10 小时前
Claude Code 高效开发 Web 2D/3D 完全指南:心法、自定义 Skill 体系与社区技能包实战
前端·3d
IT_陈寒10 小时前
SpringBoot自动配置坑了我三天,原来漏了这个注解
前端·人工智能·后端
逝水无殇11 小时前
HTML 文本格式化详解:掌握 <strong>、<em>、<mark>、<del> 等常用标签
前端·javascript·html
特立独行的猫a11 小时前
DeepSeek Harness插件和工具的区别介绍及开发入门指南
前端·ai·agent·插件·deepseek·harness
小新讲网安11 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
风骏时光牛马11 小时前
AI办公系统异常事件复盘分析
前端
console.log('npc')11 小时前
React 19 + Vite 企业级前端项目:从零搭建到规范交付
前端·react.js·前端框架