音乐播放器卡片(播放进度 + 切歌音量 CSS 源码)

CSSJS 许可:自研原创

音乐播放器卡片组件源码:播放/暂停、进度条拖拽跳转、上一首下一首、音量调节与播放列表高亮,纯 CSS + 原生 JS 模拟实现,适合个人站与音乐类应用界面。

效果演示(真实可交互)

下方为模拟音乐播放器卡片:点击播放按钮开始”播放”,封面图标进入漂浮动画,进度条每 0.25 秒推进;可直接拖拽进度条跳转,点击列表歌曲切换曲目(时长与标题联动更新),音量滑块会切换静音/低/高三种图标。

🎧

盛夏光年

粤喵乐队

0:00 3:24
🔊
  • 1盛夏光年3:24
  • 2海风信笺3:06
  • 3城市霓虹4:12
  • 4慢速快门2:48

完整代码

HTML 结构:卡片包含封面、歌曲信息、进度条(range 输入)、控制按钮组(上一首/播放/下一首)、音量条与播放列表:

<div class="mp-card">
  <div class="mp-cover">🎧</div>
  <div class="mp-info"><h3>盛夏光年</h3><p>粤喵乐队</p></div>
  <div class="mp-progress">
    <span>0:00</span>
    <input type="range" min="0" max="100" value="0">
    <span>3:24</span>
  </div>
  <div class="mp-controls">
    <button>⏮</button><button class="mp-play">▶</button><button>⏭</button>
    <div class="mp-vol"><span>🔊</span><input type="range" value="80"></div>
  </div>
  <ul class="mp-list">
    <li class="mp-song" data-dur="204">盛夏光年</li>
  </ul>
</div>

核心 CSS:进度条用原生 range 输入框加自定义滑块,通过 CSS 变量 --fill 控制已播放部分的渐变填充:

.mp-range {
  -webkit-appearance: none; appearance: none; height: 4px; border-radius: 999px;
  background: linear-gradient(90deg, #6c8cff var(--fill, 0%), #2b3448 var(--fill, 0%));
}
.mp-range::-webkit-slider-thumb {
  -webkit-appearance: none; width: 14px; height: 14px; border-radius: 50%;
  background: #fff; border: 2px solid #6c8cff;
}
.mp-card.playing .mp-cover { animation: mp-float 3s ease-in-out infinite; }

原生 JS 播放逻辑(模拟时钟 + 进度渲染):

function tick() {
  pos += 0.25;                       // 每 250ms 推进 0.25 秒
  if (pos >= dur) { pos = 0; loadSong((idx + 1) % songs.length); }
  updateSeek();
}
playBtn.addEventListener('click', () => {
  playing = !playing;
  playBtn.textContent = playing ? '⏸' : '▶';
  card.classList.toggle('playing', playing);
  if (playing) timer = setInterval(tick, 250);
  else clearInterval(timer);
});
seek.addEventListener('input', () => {
  pos = dur * parseFloat(seek.value) / 100;   // 拖拽跳转
  updateSeek();
});

参数说明

参数默认值说明
模拟时钟间隔250ms每次推进 0.25 秒,进度平滑
歌曲时长 data-dur秒列表每项标注真实时长,切歌时重置进度
进度填充色#6c8cff已播放部分颜色,--fill 变量控制占比
封面漂浮动画3s播放中封面的上下浮动循环
音量范围0 ~ 100原生 range,--fill 同步填充

兼容性与性能

常见问题

Q: 怎么接入真实的音频文件? 用 <audio> 标签替换模拟时钟:监听 timeupdate 更新进度,play/pause 事件同步按钮状态,拖拽时用 currentTime 赋值即可。

Q: 进度条在 Firefox 里样式不同怎么办? 已提供 ::-moz-range-thumb 前缀样式;若追求完全一致,可改用 div 自绘进度条加点击/拖拽事件。

Q: 列表歌曲多了如何滚动? 给 .mp-list 设置 max-height 与 overflow-y: auto,并用细滚动条样式保持视觉统一。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名,替换封面、歌单与配色即可。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核