【从零到一】用HTML5+CSS+JavaScript实现一个属于自己的mp3免费音乐播放器 (3) JS交互 (播放暂停、重听、停止)功能

简介: 手把手教你用HTML5撸个免费播放器

Javascript 播放器交互功能实现 🦜

整理素材 🦚

首先我们可以先把一些基本上的数据整理出来~

这里就从本地选择一些音乐文件作为播放素材~, 保存到本地项目目录下的mp3目录中

音乐素材大家可以自行寻找即可,文件可以是一些MP3/WAV格式的都可以~

如图

初始化功能 🐬

用一个数组 + JSON格式来模拟一个播放音频文件数据列表

例如

// 歌曲列表
const musicList = [
    {
    src: 'mp3/1.wav', name: 'Once Upon A Time' },
    {
    src: 'mp3/2.wav', name: 'Instruments of Retribution' },
    {
    src: 'mp3/3.wav', name: 'Millennia'},
    {
    src: 'mp3/4.wav', name: 'We Never' }
];


//获取必要的元素
var audio = document.getElementById("audio");   //获取原始音频元素
var musicName = document.getElementById("musicName"); //获取歌曲名称容器
var playPauseBtn = document.getElementById("playPauseBtn"); //暂停和播放按钮
var stopBtn = document.getElementById('stopBtn'); //停止播放按钮
var progressBar = document.getElementById('progressBar'); //获取中层进度条, 控制显示它的状态
var resetBtn = document.getElementById('resetBtn'); //重听按钮
var progressContainer = document.getElementById('progressContainer'); //进度条
var prevTrack = document.getElementById('prevTrack'); //上一曲按钮
var nextTrack = document.getElementById('nextTrack'); //下一曲按钮
var backBtn = document.getElementById('backBtn'); //快退5秒
var nextBtn = document.getElementById('nextBtn'); //快进5秒
var doubleBackBtn = document.getElementById('doubleBackBtn'); //双倍快退
var doubleNextBtn = document.getElementById('doubleNextBtn'); //双倍快进



//定义一个currentIndex变量,用来记录当前选中/激活/播放的项目初始值为0
var currentIndex = 0;
//定义初始化函数initMusic
function initMusic(index) {
   
    //赋值播放音频路径与音频名称
    audio.src = musicList[index].src;
    musicName.textContent = musicList[index].name;
    //重新加载音频资源
    audio.load();
    //如果音频没暂停就播放
    if (!audio.paused) {
   
        audio.play();
    }
}
//初始化一下
initMusic(currentIndex);

注意:初始化函数,跟后面的曲目切换有很大关系,如果你不理解没关系,顺着看我们后面的功能你就能慢慢理解了

播放与暂停功能🌿

我们可以给播放/暂停绑定一个点击事件

实现逻辑:

当点击的时候,判断是否处于暂停状态,如果是就开始播放音乐并且设置按钮中的内容显示为暂停

否则就是播放的状态,对吧,那么就暂停音乐, 并且设置按钮中的内容显示为播放

代码如下

// 播放/暂停
playPauseBtn.addEventListener('click', () => {
   
    if (audio.paused) {
   
        audio.play();
        playPauseBtn.textContent = '❚❚';
    } else {
   
        audio.pause();
        playPauseBtn.textContent = '▶';
    }
});

效果如下

当然我这里是有声音的~

另外如果大家有方法和函数不明白,我们可以去借助w3school文档进行查看~

刚才我们使用到的一些方法都可以在这里找到, 没有这个文档的可以后台私信我!

如图

停止播放按钮功能 🌎

这个功能的逻辑代码也很简单, 同样也是利用事件绑定

当点击停止按钮的时候,首先我们可以利用暂停方法,把音乐暂停!

因为API里面没有停止方法,然后我们设置currentTime0

currentTime是设置或返回音频和视频中的当前播放的位置, 以秒来计算~

如图

那么根据逻辑,我们也需要把暂停按钮所显示的状态修改成准备播放的内容~

并且因为这里是停止,所以如果有进度条,那也肯定是从头开始~

所以进度条,我们要重置到0

代码如下

stopBtn.addEventListener('click', () => {
   
    audio.pause();
    audio.currentTime = 0;
    playPauseBtn.textContent = '▶';
    progressBar.style.width = '0%';
});

重听当前歌曲功能 🐋

其实我们在做这个功能之前,要理解这个功能到底是怎么样的~

就比如这里的重听功能, 你把它的意思梳理清晰,那么代码自然也就出来了

重听的意思很显然就是从头开始听, 那会导致哪些状态~

首先我们的音频播放位置肯定要设置为0, 也就是audio.currentTime属性

然后我们给重听按钮绑定一个点击事件看看效果~

代码如下

// 重听当前歌曲
resetBtn.addEventListener('click', () => {
   
    audio.currentTime = 0;
    //这里要考虑到如果用户点击了暂停键,要重听的情况下也要播放
    if (audio.paused) {
   
        //开始播放
        audio.play();
        //设置暂停与播放按钮的内容为❚❚
        playPauseBtn.textContent = '❚❚';
    }
});
相关文章
|
4月前
|
移动开发 前端开发 JavaScript
|
2月前
|
人工智能 API 数据安全/隐私保护
不止提效!OpenClaw 零基础阿里云/本地部署及免费API配置+6大赚钱案例拆解与避坑教程
2026年,OpenClaw(曾用名Clawdbot)的热度已从“工具提效”蔓延至“商业变现”——当多数人还在用它写邮件、整理日程时,少数先行者已通过信息套利、无人公司运营、技术服务等模式实现月入数万。从区块链预测市场的“延时套利”到律所的“深夜客户响应”,从18岁开发者的“一键托管服务”到AI Agent自主接单赚钱,OpenClaw的商业价值正被重新定义:它不再是单纯的效率工具,而是可24小时运转、低门槛启动的“数字赚钱机器”。
1323 5
不止提效!OpenClaw 零基础阿里云/本地部署及免费API配置+6大赚钱案例拆解与避坑教程
|
4月前
|
Web App开发 安全
Chrome浏览器自动拦截某些下载内容 解决方案
Chrome下载文件常因安全机制被拦截。可通过设置允许不安全内容解决:在地址栏输入`chrome://settings/content/insecureContent`,添加`[*.]com`等域名,即可免手动确认下载。建议按需添加,兼顾安全与便利。(239字)
2403 3
Chrome浏览器自动拦截某些下载内容 解决方案
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
GPT与BERT深度解析:Transformer的双子星架构
GPT基于Transformer解码器,擅长文本生成;BERT基于编码器,专注文本理解。二者在架构、注意力机制和训练目标上差异显著,分别适用于生成与理解任务,体现了AI智能的多元化发展。
|
7月前
|
JavaScript 前端开发 数据可视化
[NMP v2] NeteaseMiniPlayer v2 搭建个人网站网易云迷你播放器
NeteaseMiniPlayer v2 [NMP v2]是一款高颜值、无依赖的前端嵌入式网易云音乐迷你播放器,,轻松部署于个人网站,提升音网站体验。
665 6
[NMP v2] NeteaseMiniPlayer v2 搭建个人网站网易云迷你播放器
|
JavaScript 前端开发
js时间戳转日期时间
js时间戳转日期时间
783 76
|
Java 测试技术 数据库
游戏攻略|基于SprinBoot+vue的游戏攻略平台(源码+数据库+文档)
游戏攻略|基于SprinBoot+vue的游戏攻略平台(源码+数据库+文档)
297 0