【从零到一】用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
|
数据采集 监控
如何检测和应对网站的反爬虫机制?
如何检测和应对网站的反爬虫机制?
2025 3
|
机器学习/深度学习 存储 PyTorch
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
【AMP实操】解放你的GPU运行内存!在pytorch中使用自动混合精度训练
1656 0
|
弹性计算 网络协议 安全
阿里云添加端口
阿里云添加端口
1549 0
深入分析luait反编译之luajit-decomp
#背景 Luajit在游戏中应用广泛,在逆向分析游戏过程中免不了与luajit打交道,那网上有非常多关于luajit反编译的资料,汇总起来常用的两种方案:https://github.com/zzwlpx/ljd 和 https://github.com/bobsayshilol/luajit-decomp, 第一种方案相对来说可读性好但兼容性差经常出现反编译异常崩溃。第二种方案反编译
8305 0
|
4月前
|
Web App开发 安全
Chrome浏览器自动拦截某些下载内容 解决方案
Chrome下载文件常因安全机制被拦截。可通过设置允许不安全内容解决:在地址栏输入`chrome://settings/content/insecureContent`,添加`[*.]com`等域名,即可免手动确认下载。建议按需添加,兼顾安全与便利。(239字)
1940 3
Chrome浏览器自动拦截某些下载内容 解决方案
|
7月前
|
JavaScript 前端开发 数据可视化
[NMP v2] NeteaseMiniPlayer v2 搭建个人网站网易云迷你播放器
NeteaseMiniPlayer v2 [NMP v2]是一款高颜值、无依赖的前端嵌入式网易云音乐迷你播放器,,轻松部署于个人网站,提升音网站体验。
587 6
[NMP v2] NeteaseMiniPlayer v2 搭建个人网站网易云迷你播放器
|
10月前
|
人工智能 自然语言处理 前端开发
AI 时代,那些你需要了解的开源项目(二) |AI开发工具篇
随着人工智能技术的发展,AI驱动的开发工具正改变软件开发方式。Bolt.diy和OpenHands作为GitHub上热门的开源项目,分别在Web应用构建与全栈开发自动化方面表现突出。Bolt.diy支持通过自然语言快速生成完整Web应用,适合原型开发与小型项目;而OpenHands则专注于复杂软件任务自动化,如代码编写、调试与测试,适用于专业团队和大型项目。两者均提供自部署方案,助力开发者提升效率,推动AI在软件开发中的深度应用。
1091 0