【从零到一】用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 = '❚❚';
    }
});
相关文章
|
23天前
|
移动开发 前端开发 JavaScript
|
11天前
|
人工智能 JSON API
手把手教你配置 AI 调度官,实现任务自动化流转
本文详解2026年企业级AI调度官(AI Orchestrator)实战配置:以多智能体协同为核心,构建“意图理解—动态规划—智能分发”闭环系统,覆盖四层架构、任务拆解、反思审计与跨境电商落地场景,助你实现真正自动化业务流转。(239字)
|
2月前
|
监控 安全 Unix
iOS 崩溃排查不再靠猜!这份分层捕获指南请收好
从 Mach 内核异常到 NSException,从堆栈遍历到僵尸对象检测,阿里云 RUM iOS SDK 基于 KSCrash 构建了一套完整、异步安全、生产可用的崩溃捕获体系,让每一个线上崩溃都能被精准定位。
618 71
|
23天前
|
存储 数据采集 弹性计算
面向多租户云的 IO 智能诊断:从异常发现到分钟级定位
当 iowait 暴涨、IO 延迟飙升时,你是否还在手忙脚乱翻日志?阿里云 IO 一键诊断基于动态阈值模型与智能采集机制,实现异常秒级感知、现场自动抓取、根因结构化输出,让每一次 IO 波动都有据可查,真正实现从“被动响应”到“主动洞察”的跃迁。
251 55
|
5天前
|
机器学习/深度学习 存储 人工智能
让 AI 智能体学会自我进化:Agent Lightning 实战入门
Agent Lightning 是一个框架无关的强化学习包装层,赋能现有AI智能体实现在线持续学习。它解耦执行与训练,支持LangChain/AutoGen等任意框架,通过VERL算法解决稀疏奖励难题,让智能体从运行反馈中自动优化提示词与策略。
64 5
让 AI 智能体学会自我进化:Agent Lightning 实战入门
|
存储 缓存 NoSQL
开源 | 阿里云 Tair KVCache Manager:企业级全局 KVCache 管理服务的架构设计与实现
阿里云 Tair 联合团队推出企业级全局 KVCache 管理服务 Tair KVCache Manager,通过中心化元数据管理与多后端存储池化,实现 KVCache 的跨实例共享与智能调度。该服务解耦算力与存储,支持弹性伸缩、多租户隔离及高可用保障,显著提升缓存命中率与资源利用率,重构大模型推理成本模型,支撑智能体时代的规模化推理需求。
|
2月前
|
数据采集 人工智能 运维
AgentRun 实战:快速构建 AI 舆情实时分析专家
搭建“舆情分析专家”,函数计算 AgentRun 快速实现从数据采集到报告生成全自动化 Agent。
827 56
|
23天前
|
Web App开发 安全
Chrome浏览器自动拦截某些下载内容 解决方案
Chrome下载文件常因安全机制被拦截。可通过设置允许不安全内容解决:在地址栏输入`chrome://settings/content/insecureContent`,添加`[*.]com`等域名,即可免手动确认下载。建议按需添加,兼顾安全与便利。(239字)
631 3
Chrome浏览器自动拦截某些下载内容 解决方案
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
大模型应用:本地大模型部署中的Token效率优化与性能分析.9
本文基于Qwen1.5-1.8B-Chat模型,构建了完整的Token监控与优化系统,深入分析对话中Token消耗模式,涵盖分词原理、多轮累积统计、上下文压缩、Prompt精简及响应长度控制等策略,为中小规模大模型的高效、低成本部署提供可复用方案。
124 14