Skip to content

FxMusicBall 音乐球

悬浮在页面左下角的音乐播放器,毛玻璃质感,支持单曲/列表模式。

视觉效果

  • 毛玻璃背景backdrop-filter: blur() 半透明效果,亮暗模式自动适配
  • 紫蓝渐变进度环 — SVG 自绘进度环,支持渐变 stroke(#bd34fe → #41d1ff
  • 旋转光环 — 播放时球体外围出现匀速旋转的渐变光环
  • 进度环脉冲 — 播放时进度环有从紫到蓝的脉冲发光效果
  • 背景微光流动 — 播放时球体背景有紫蓝光斑流动效果
  • 暗色发光 — 暗色模式下播放时球体周围出现紫蓝色光晕

交互设计

状态行为
默认50px 圆球,显示播放按钮和环形进度
鼠标悬停0.5s 后弹性展开为 330px 宽的控制面板
控制面板播放/暂停、时间显示、进度条、音量控制、列表按钮
音量鼠标悬停音量图标时展开音量滑块
音乐列表点击列表按钮弹出曲目列表,带淡入上移动画

配置

单曲模式

ts
musicBall: {
  src: '/music/my-song.mp3',
  autoplay: false,
  loop: true,
}

列表模式

ts
musicBall: {
  list: [
    { name: '梦中的婚礼', src: '/music/wedding-dream.mp3' },
    { name: '海阔天空', src: '/music/broad-sea-sky.mp3' },
    { name: '碎银几两', src: '/music/silver-coins.mp3' },
  ],
  autoplay: true,
  loop: true,
}

配置项

字段类型默认值说明
enablebooleantrue是否启用音乐球
visiblebooleantrue是否可见(通过 display 控制)
autoplaybooleanfalse自动播放(注意:浏览器可能阻止自动播放)
loopbooleantrue循环播放(仅单曲模式有效)
srcstring''单首音乐地址
listMusicItem[]多首音乐列表

无障碍

所有动画效果尊重 prefers-reduced-motion 系统设置。当用户开启减弱动画偏好时,旋转光环、脉冲、微光等动效自动禁用。

技术细节

  • 使用自绘 SVG 替代 Element Plus 的 ElProgress 组件,支持渐变 stroke
  • 进度环使用 stroke-dasharray 实现弧形进度指示
  • 通过 is-playing CSS 类名控制播放状态动效
  • 旋转光环通过 v-if="isPlay" 条件渲染,暂停时从 DOM 移除以节省资源

在MIT许可下发布    备案号: 晋ICP备2024051569号-1