基于H5+js开发一款音乐播放器

article/2025/9/21 20:02:32

前言:当下音乐播放器不胜其数,为了更好的掌握一些东西,我们来自己制作一个音乐播放器。
在这里插入图片描述

文章目录:

  • 一.开发环境:
  • 二.页面视图:
    • 1.主文件入口(首页):
    • 2.音乐播放界面:
  • 三.功能实现
    • (1)、index.html:
    • (2)、播放音乐(music.html):
    • (3)、样式文件(index.css):
  • 四.项目地址:


一.开发环境:

开发工具:HbuliderX;

框架:Vant,Mui,Vue

后端:Node


二.页面视图:

正常情况下我们的开发都会有构思图以及模块规划等过程,我们先来看看大致的页面构图:

1.主文件入口(首页):

在这里插入图片描述

2.音乐播放界面:

在这里插入图片描述


三.功能实现

项目文件布局:
在这里插入图片描述


(1)、index.html:

首先新建文件为h5+app项目,那么我们来看看其中index的页面:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><title></title><script src="./js/mui.min.js"></script><link href="./css/mui.min.css" rel="stylesheet"/><!-- 引入vue --><script src="./js/vue.min.js"></script><!-- 引入样式文件 --><link rel="stylesheet" href="./css/vant.mim.css" rel="external nofollow" target="_blank" ><!-- 引入 Vue 和 Vant 的 JS 文件 --><script src="./js/vant.min.js" rel="external nofollow" ></script><!-- 自定义css文件 --><link rel="stylesheet" type="text/css" href="css/index.css"/><!-- jquery文件 --><script type="text/javascript" src="./js/jquery.min.js"></script></head>
<body><div id="app"><div class="head"><header class="mui-bar mui-bar-nav"><h1 class="mui-title">音乐播放器</h1></header></div><div><van-notice-bar text="所有歌曲来自网易云,若有侵权联系邮箱(1848514604@qq.com)" left-icon="volume-o" /></div><div class="contents"><span style="display: inline-block;width: 100%;height: 5%;line-height:1.875rem;text-align: center;">当前存在:<strong>{{musicData.length}}</strong>首歌曲(歌曲每天会进行实时更新)</span><div class="contents_bottom"><ul><li @click="seeMsg(index,item)" v-for="(item,index) in musicData" :key="index"><span style="padding-left: 0.625rem;font-size: 0.875rem;">{{index+1}}</span> <span class="mui-icon mui-icon-arrowthinright"></span><a href="javascript:;" :title="item" style="color: #000000;font-size: 1.125rem;"><span style="margin-left: 3.125rem; ">{{item.substring(0,item.length-4)}}</span></a></li></ul></div></div></div><script type="text/javascript" charset="utf-8">mui.init();var app = new Vue({el: '#app',data: {// 存储所有音乐musicData:[]},created() {this.get()},methods:{//初始化获取文件列表get(){var that=this$.get('http://www.jcsy.work:3333/see_music').then(res=>{if(res.code===200){vant.Toast('初始化数据获取成功!');//vue中的渲染that.musicData=res.data}}).catch(e=>{vant.Toast.fail('服务异常,请稍候重试!');})},// 点击跳转传参事件seeMsg(index,item){console.log(item)mui.openWindow({url:'music.html',extras: {    //extras里面的就是参数了name:{item:item,index:index}},})}}})</script>
</body>
</html>

引入的文件都是通过下载本地的,为了减少app运行时数据加载的请求


(2)、播放音乐(music.html):

<!doctype html>
<html><head><meta charset="utf-8"><title></title><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /><link href="css/mui.css" rel="stylesheet" /><link href="css/mui.min.css" rel="stylesheet"/><script src="js/mui.js"></script><!-- 引入vue --><script src="./js/vue.min.js"></script><!-- 引入样式文件 --><link rel="stylesheet" href="./css/vant.mim.css" rel="external nofollow" target="_blank" ><!-- 引入 Vue 和 Vant 的 JS 文件 --><script src="./js/vant.min.js" rel="external nofollow" ></script><!-- 自定义css文件 --><link rel="stylesheet" type="text/css" href="css/index.css"/><!-- jquery文件 --><script type="text/javascript" src="./js/jquery.min.js"></script></head><body><div id="music"><div class="head"><header class="mui-bar mui-bar-nav"><a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a><h1 class="mui-title">{{names.substring(0,names.length-4)}}</h1></header></div><div style="height: 93%;" class="contents"><!-- 图片区域 --><div class="img_photo"><img id="imgshow" src="./img/zxc.jpg" ></div><!-- 歌词区域 --><div class="music_words"><!-- 进度条 --><div><van-progress :percentage="count" pivot-text='' stroke-width="15"/></div><span>歌曲全名:{{names}}</span><br><p><span>{{musicNow}}  /  {{musicLength}}</span> </p><span>暂无歌词,持续更新中...</span></div><!-- 操作区域 --><div class="music_manager"><!-- 上一首按钮--><img src="img/up.png" @click="upMusic"><!-- 播放与暂停按钮 --><img id="start" src="./img/pause.png" @click="loadMusic"><!-- 下一首按钮 --><img src="img/down.png" @click="downMusic"></div><div style="width: 100%;height: 5%;background-color: #dfdfdf;text-align: center;line-height:2.1875rem;"><span>Copyright©2021 <strong>叫做长大</strong></span></div><!-- 音乐的播放--><audio id="audio" :src="musicname" preload></div></div><script type="text/javascript">mui.init()mui.plusReady(function(){var self = plus.webview.currentWebview();var name = self.name;//获得参数var app = new Vue({el: '#music',data() {return{//标题栏的歌曲名names:'',//播放音乐的链接musicname:'',//存储歌曲名的musicData:[],//歌曲的总长度musicLength:'',//当前歌曲的进度musicNow:'00:00',//进度条的百分比count:''}},created() {var that=thisthat.names=name.itemthat.musicname='http://www.jcsy.work:3333/music/'+(name.item)that.get()// 初始化获取歌曲时长setTimeout(function(){var music = document.getElementById("audio");that.musicLength=that.secondToTimeStr(Math.round(music.duration))},500)},methods:{// 刷新所有的数据get(){var that=this$.get('http://www.jcsy.work:3333/see_music').then(res=>{if(res.code===200){that.musicData=res.data}}).catch(e=>{vant.Toast.fail('服务异常,请稍候重试!');})},// 上一首upMusic(){var that=thisvar music = document.getElementById("audio");if(name.index<0){name.index=that.musicData.length+1}that.musicNow='00:00'$('#start').attr('src','./img/pause.png')name.index--that.names=that.musicData[name.index]that.musicname='http://www.jcsy.work:3333/music/'+that.names// $('#start').attr('src','./img/start.png')that.musicLength=that.secondToTimeStr(Math.round(music.duration))that.getMusic()music.play()},// 下一首downMusic(){var that=thisvar music = document.getElementById("audio");if(name.index>=that.musicData.length){name.index=-1}that.musicNow='00:00'$('#start').attr('src','./img/pause.png')name.index++that.names=that.musicData[name.index]that.musicname='http://www.jcsy.work:3333/music/'+that.names// $('#start').attr('src','./img/start.png')that.musicLength=that.secondToTimeStr(Math.round(music.duration))that.getMusic()music.play()},// 开始暂停按钮loadMusic(){var that=thisvar music = document.getElementById("audio");if( $('#start').attr('src')==='./img/pause.png'){$('#start').attr('src','./img/start.png')music.play()//播放音乐that.getMusic()}else{$('#start').attr('src','./img/pause.png')music.pause();//暂停音乐}},//获取列表getMusic(){var that=thisvar current=0setInterval(function(){var music = document.getElementById("audio");that.count=Math.floor((music.currentTime/music.duration)*100) that.musicNow=that.secondToTimeStr(Math.round(music.currentTime))if(that.count===100){music.pause()alert('歌曲播放结束')}},1000)},// 秒数转化secondToTimeStr(t) {if (!t) return;if (t < 60) return "00:" + ((i = t) < 10 ? "0" + i : i);if (t < 3600) return "" + ((a = parseInt(t / 60)) < 10 ? "0" + a : a) + ":" + ((i = t % 60) < 10 ? "0" + i : i);if (3600 <= t) {var a, i, e = parseInt(t / 3600);return (e < 10 ? "0" + e : e) + ":" + ((a = parseInt(t % 3600 / 60)) < 10 ? "0" + a : a) + ":" + ((i = t % 60) < 10 ? "0" + i : i);}}}})});</script></body>
</html>

(3)、样式文件(index.css):

*{margin: 0;padding: 0;
}
body,html{width: 100%;height: 100%;
}
#app{width: 100%;height: 100%;/* background-color: pink; */
}
#music{width: 100%;height: 100%;/* background-color: skyblue; */
}
.head{width: 100%;height: 7%;/* background-color: skyblue; */
}
.contents{width: 100%;height: 87%;/* background-color: #07C160; */
}
.contents_bottom{width: 100%;height:95%;/* background-color: #007AFF; */overflow: auto;
}
.contents_bottom ul li{width: 100%;height: 3.75rem;background-color: #dfdfdf;margin-top: 0.625rem;margin-right: 0.625rem;line-height: 3.75rem;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;
}
/* 图片 */
.img_photo{width: 70%;height: 40%;/* background-color: #07C160; */margin: 0 auto;text-align: center;/* border-radius: 50%; *//* animation: music 15s linear infinite; */
}
.img_photo img{width: 90%;height: 90%;margin-top: 0.625rem;border-radius: 50%;
}
/* 歌词 */
.music_words{width: 100%;height: 35%;/* background-color: skyblue; */line-height: 3.125rem;margin-top: 0.3125rem;text-align: center;
}
/* 操作 */
.music_manager{width: 100%;height: 17%;/* background-color: orangered; */margin-top: 0.625rem;display: flex;
}
.music_manager img{width: 1;height: 5rem;margin-top: 1.25rem;margin-left:1.875rem;margin-right: 1.25rem;
}
#imgshow{/* transform: rotate(90deg); */animation: music 15s linear infinite;
}
@keyframes music{0%{transform: rotate(0deg);}25%{transform: rotate(90deg);}50%{transform: rotate(180deg);}75%{transform: rotate(270deg);}100%{transform: rotate(360deg);}
}

四.项目地址:

  • Git地址:MusicPlayer
  • Csdn资源地址:MusicPlayer

不论你的生活如何卑微,你要面对它生活,不要躲避它,更别用恶言咒骂它。


http://chatgpt.dhexx.cn/article/0ForShLO.shtml

相关文章

H5纯原生播放器 【学习video】

这是一个纯原生的H5播放器&#xff0c;尽管网上有很多第三方库&#xff0c;但是基础打的牢固&#xff0c;一定会帮你走的更远。 大厂也非常重视基础&#xff0c;再说了那些第三方库也是基础一点点搭起来的&#xff0c;所以有兴趣学习的同学可以下载来学习。 代码中的细节我都…

MuiPlayer - 一款优秀的 H5 视频播放器框架

Mui Player Gitee | Docs | 中文文档 介绍 MuiPlayer 是一款 HTML5 视频播放插件&#xff0c;其默认配置了精美可操作的的播放控件&#xff0c;涉及了常用的播放场景&#xff0c;例如全屏播放、播放快进、循环播放、音量调节、视频解码等功能。 支持 mp4、m3u8、flv 等多…

[h5]一个基于HTML5实现的视频播放器代码详解

什么是 HTML5&#xff1f; HTML5 是最新的 HTML 标准。 HTML5 是专门为承载丰富的 web 内容而设计的&#xff0c;并且无需额外插件。 HTML5 拥有新的语义、图形以及多媒体元素。 HTML5 提供的新元素和新的 API 简化了 web 应用程序的搭建。 HTML5 是跨平台的&#xff0c;被…

一个牛逼的开源 H5 视频播放器

【公众号回复 “1024”&#xff0c;免费领取程序员赚钱实操经验】 大家好&#xff0c;我是章鱼猫。今天给大家分享的这个开源项目&#xff0c;对于前端开发者来讲非常非常的有用。因为它是一个 H5 的视频播放器。 字节跳动出品&#xff0c;必属精品啊&#xff01;尤其是我感觉在…

H5移动端页面使用DPlayer视频播放器

背景&#xff1a; 如果使用原生video标签&#xff0c;那在不同类型手机浏览器上样式都不一样&#xff0c;而且播放表现不一样&#xff0c;比如使用css隐藏播放按钮在PC端有效&#xff0c;在手机端就无效&#xff0c;故我们选择引入第三方成熟的播放器。 需求&#xff1a; 1、自…

13款用于Web的流行HTML5视频播放器

​​​​​​当视频流媒体席卷通信世界&#xff0c;为了保持和提升用户增长&#xff0c;内容创造者和流媒体服务提供者需要提供高质量的用户体验。而想要实现这一点&#xff0c;他们都需要在自己的网站上内嵌HTML5视频播放器。 在本文中&#xff0c;我们将来了解一下现在市面上…

分位数回归的实现方法

目录 分位数回归简介实现方法参考文献 分位数回归简介 简介参照可参照参考文献【1】。如下图&#xff0c;散点图代表我们所需分析数据&#xff0c;若用简单的参数方程拟合&#xff0c;即只利用期望值&#xff0c;会损失很多数据特征。因此分位数回归就可以乘风破浪了。 分位数…

分位数回归(Quantile Regression)代码解析

实验代码 本文采用python sklearn库中&#xff0c;作为quantile regression的示例代码。以下为详细解析&#xff1a; import numpy as np import matplotlib.pyplot as pltfrom sklearn.ensemble import GradientBoostingRegressor %matplotlib inline np.random.seed(1) #设…

python中的分位数回归(初探)

分位数回归 参考文献 Python statsmodels 介绍 - 树懒学堂 (shulanxt.com) Quantile Regression - IBM Documentation https://www.cnblogs.com/TMesh/p/11737368.html 传统的线性回归模型 其的求解方式是一个最小二乘法&#xff0c;保证观测值与你的被估值的差的平方和应…

分位数回归 Quantile Regression,python 代码

偶尔在机器学习的论文中了解到了分位数回归&#xff0c;发现这个方法应用也满广的。 文章目录 1. 分位数回归的数学原理2. 分位数回归的求解原理3 python 分位数回归 1. 分位数回归的数学原理 一般的回归方法是最小二乘法&#xff0c;即最小化误差的平方和&#xff1a; min ⁡…

实证操作:R语言实现分位数回归的介绍

“分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。从最小二乘法可以看出,传统回归中最小化残差的平方极易受极端值的影响,而且属于均值回归,这种方法不能得到不同分布下的数据关系 导入程序包与数据 分位数回归不考虑同方差、正态分布的假设,…

分位数回归

分位数&#xff08;Quantile&#xff09;&#xff0c;亦称分位点&#xff0c;是指将一个随机变量的概率分布范围分为几个等份的数值点&#xff0c;常用的有中位数&#xff08;即二分位数&#xff09;、四分位数、百分位数等。 任意一个累计分布函数 F ( x ) F(x) F(x) &#…

多元线性模型的分位数回归

多元线性模型的分位数回归 一、为什么要使用分位数回归&#xff1f;二、分位数回归基本模型三、分位数回归估计--线性规划3.1损失函数3.2目标函数3.3线性规划3.4回归算法 四、实际案例分析与python编程计算4.1引入数据集4.2计算 β ^ \widehat{\beta} β ​ 五、参考文献 一、为…

R语言的分位数回归

回归是科研中最常见的统计学研究方法之一&#xff0c;在研究变量间关系方面有着极其广泛的应用。由于其基本假设的限制&#xff0c;包括线性回归及广义线性回归在内的各种常见的回归方法都有三个重大缺陷&#xff1a;(1)对于异常值非常敏感&#xff0c;极少量的异常值可能导致结…

分位数回归--基于R

分位数回归 分位数回归是估计一组回归变量X与被解释变量Y的分位数之间线性关系的建模方法。以往的回归模型实际上是研究被解释变量的条件期望。而人们也关心解释变量与被解释变量分布的中位数、分位数呈何种关系。它最早由Koenker和Bassett(1978)提出。OLS回归估计量的计算是基…

基于R语言的分位数回归(quantile regression)

分位数回归&#xff08;quantile regression&#xff09; 这一讲&#xff0c;我们谈谈分位数回归的知识&#xff0c;我想大家传统回归都经常见到。分位数回归可能大家见的少一些&#xff0c;其实这个方法也很早了&#xff0c;大概78年代就有了&#xff0c;但是那个时候这个理论…

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程&#xff0c;只好自己写一个了… 参考教材&#xff1a;《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧&#xff0c;很长很长&#xff0c;这里主要是…

分位数回归的求解

分位数回归 分位数回归实际上是一种特殊的 ℓ 1 \ell_1 ℓ1​回归问题&#xff0c;特别地&#xff0c;当所求分位数 τ 0.5 \tau0.5 τ0.5时就是中位数回归。 1 线性规划 1.1 将分位数回归看做是线性规划问题来求解 一般的&#xff0c;线性回归问题可以写为 ℓ p \ell_p ℓ…

分位数回归模型学习笔记

我读硕士老师给我的第一篇论文就是一个分位数回归的文章&#xff0c;当时觉得这个模型很简单&#xff0c;我很快就用R的示例文件写了一个例子&#xff0c;但是&#xff0c;在后面的研究中&#xff0c;我越来越觉得&#xff0c;这个模型没有我想的那么简单&#xff0c;而且有着非…

Python统计学11——分位数回归

分位数回归也是数理统计里面经典的模型&#xff0c;他相对于在最小二乘模型上进行了改进&#xff0c;虽然本身还是线性的参数模型&#xff0c;但对损失函数进行了改进。我们都知道最小二乘的损失函数是均方误差最小&#xff0c;分位数的损失函数是&#xff1a; 可以看到分位数损…