运用js教你轻松制作html音乐播放器


Posted in Javascript onApril 17, 2020

用HTML做了个音乐播放器,可以循环播放,选择歌曲,以及自动播放下一首,运用了js和json知识,下面是效果图和源码,有兴趣的可以试试哦

效果图:

运用js教你轻松制作html音乐播放器

源码:html

<span style="color:#999999;"><!DOCTYPE html> 
<html> 
 
 <head> 
 <meta charset="utf-8" /> 
 <title>音乐播放器</title> 
 <script type="text/javascript" src="js/jquery-2.1.1.min.js" ></script> 
 <script src="js/music.js" type="text/javascript" charset="utf-8"></script> 
 <style> 
 * { 
 margin: 0 auto; 
 padding: 0; 
 } 
 
 .page { 
 position: absolute; 
 width: 100%; 
 height: 100%; 
 } 
 
 .header { 
 width: 100%; 
 height: 44px; 
 background: lightcoral; 
 position: relative; 
 } 
 
 .title { 
 font-size: 20px; 
 color: white; 
 float: left; 
 margin: 7px 10px; 
 } 
 
 .search { 
 float: right; 
 width: 30px; 
 margin: 7px 10px; 
 } 
 
 .earch { 
 float: right; 
 width: 30px; 
 margin: 7px 10px; 
 } 
 .musicBox{ 
 width: 100%; 
 position: absolute; 
 top: 44px; 
 bottom: 50px; 
 background:url(音乐播放器资源/img/bg.jpg); 
 background-size:100% 100%; 
 /*内容超出范围部分滚动*/ 
 overflow: scroll; 
  
 } 
 /*定义一条音乐的列表,每行的样式 在js中动态加载到音乐列表每一行的div上*/ 
 .music{ 
 width: 100%; 
 height: 60px; 
 border-bottom: 2px solid gray; 
 margin: 10px 20px; 
  position: relative; 
 } 
 .music img{ 
 width: 40px; 
 height: 40px; 
 margin: 10px 20px; 
 
 } 
 .music p{ 
 color: goldenrod; 
 position: absolute; 
 left: 85px; 
 top: 10px; 
  
 } 
 /*音乐播放时所对应的行的样式*/ 
 .musicPlay{ 
 background: rgba(120,10,60,0.4); 
  
 } 
 .musicPlay p{ 
 color: red; 
 } 
 /*设置footer 的样式*/ 
 .footer{ 
 width: 100%; 
 height: 50px; 
 position: absolute; 
 bottom: 0px; 
 background: lightcoral; 
 } 
 .range{ 
 width: 100%; 
 position: absolute; 
 top: -3px; 
 left: 0px; 
  
 } 
 .pic{ 
 width: 30px; 
 height: 30px; 
 position: absolute; 
 left: 10px; 
 top: 12px; 
 border-radius: 15px; 
 animation: picAn 2s infinite linear; 
  
 } 
 @keyframes picAn{ 
 from{} 
 to{transform: rotate(360deg);} 
 } 
 /*控制按钮的样式*/ 
 .play{ 
 width: 20px; 
 height: 20px; 
 position: absolute; 
 left: 45%; 
 top: 10px; 
 } 
 .pre{ 
 width: 30px; 
 height: 30px; 
 position: absolute; 
 left: 0px; 
 top: 5px; 
  
 
 } 
 .next{ 
 width: 30px; 
 height: 30px; 
 position: absolute; 
 right: 0px; 
 top: 5px; 
 } 
 .love{ 
 position: absolute; 
 right: 5px; 
 top: 15px; 
 width: 20px; 
 height: 30px; 
  
 } 
 .musicControls{ 
 position: absolute; 
 width: 50%; 
 left: 25%; 
 top: 10px; 
 } 
 </style> 
 </head> 
 
 <body> 
 <div class="page"> 
 <audio id="audio"></audio> 
 <div class="header"> 
 <h3 class="title">我的音乐</h3> 
 <img class="search" src="音乐播放器资源/img/search.png" /> 
 <img class="earch" src="音乐播放器资源/img/earch.png" /> 
 </div> 
 <!--显示音乐类表--> 
 <div class="musicBox"> 
 <!--内容要通过读取json文件来获得 音乐列表--> 
 
 </div> 
 <!--控制台--> 
 <div class="footer"> 
 <!--进度条--> 
 <input type="range" class=" range" /> 
 <img src="音乐播放器资源/img/deng.jpg" class="pic" /> 
 <!--控制按钮--> 
 <div class="musicControls"> 
  <img src="音乐播放器资源/img/pre.png" class="pre" /> 
  <img src="音乐播放器资源/img/play.png" class="play" /> 
  <img src="音乐播放器资源/img/next.png" class="next" /> 
 </div> 
 <img src="音乐播放器资源/img/shoucang.png" class="love" /> 
 </div> 
 </div> 
 
 </body> 
 
</html></span>

下面是js代码:

$(document).ready(function(){ 
 //音乐播放器需要,播放器对象player,音乐对象,用play去播放music对象 
// 创建music对象,用于保存音乐的属性 
 function Music(){ 
 
 } 
 Music.prototype.src= ""; 
 Music.prototype.img =""; 
 Music.prototype.num=""; 
 Music.prototype.musicName=""; 
 Music.prototype.name=""; 
 //创建player对象 
 function Player(){ 
 
 } 
 Player.prototype.audio = document.getElementById("audio"); 
// 目前播放第几首歌 
 Player.prototype.playIndex=0; 
 Player.prototype.isplay = false; 
// 定义播放器的方法 
 Player.prototype.rangUpdate = function(){ 
 //this.audio.ontimeupdate =function() 音乐播放器播放音乐时监听 
 //把进度条和音乐的时间长度结合起来 
 //音乐每播放一秒进读条就会前进一个单位 this.duration音乐的总长度 
 this.audio.ontimeupdate =function(){ 
  //把进度条的总长度设为音乐的总长度 
 $(".range").attr("max",this.duration); 
  
 //设置进度条的值为播放的时间 
 $(".range").val(this.currentTime); 
 //当一首歌播放完再去播放下一首 
 if (this .currentTime == this.duration ) { 
 player.nextMusic(); 
 } 

  
 } 
 
 }; 
 Player.prototype.playMusic =function(){ 
 //向播放器添加音乐路径 
 $(this.audio).attr("src",musicModels[this .playIndex].src); 
 this .audio.play(); 
 //换音乐图片 
 $(".pic").attr("src",musicModels[this.playIndex].img); 
 //波让其的状态 
 this .isplay= true; 
 
 }; 
 Player.prototype.nextMusic = function(){ 
 
 
 //越界问题 
 if (this .playIndex >= musicModels.length - 1) { 
 this.playIndex = 0; 
  
 }else{ 
 this.playIndex = this .playIndex + 1; 
 } 
 //改变音乐类表的对应项的样式 
 
 this.playMusic(); 
 $(".music").eq(this.playIndex).addClass("musicPlay") 
 .siblings() 
 .removeClass("musicPlay"); 
 
 }; 
 Player.prototype.preMusic =function(){ 
 if (this .playIndex <= 0) { 
 this.playIndex = musicModels.length-1; 
  
 }else{ 
 this.playIndex = this .playIndex - 1; 
 } 
 //改变音乐类表的对应项的样式 
 
 this.playMusic(); 
 $(".music").eq(this.playIndex).addClass("musicPlay") 
 .siblings() 
 .removeClass("musicPlay"); 
 }; 
 Player.prototype.playOrPause = function(){ 
 if(this.isplay){ 
 this.audio.pause(); 
 $(".play").attr("src","音乐播放器资源/img/stop.png"); 
 }else{ 
 this.audio.play(); 
 $(".play").attr("src","音乐播放器资源/img/play.png"); 
 } 
 this.isplay = !this.isplay; 
 }; 
// js文件从此向下 
// 创建音乐数组 
 var musicModels = []; 
 //创建音乐播放器对象 
 var player= new Player(); 
 /*Ajax 目的是在js中实现异步操作 
 * JS是单线程 的,在单线程中模拟java oc 多线程 开辟异步任务,,浏览器的引擎去做一步操作, 
 * 实质上不是开辟一个子线程,而是创建一个异步任务 
 * 优点: 
 * 1.不需要用户等待服务器相应 
 * 在异步派发xmlHTTPRequest 请求后,马上把控制权收回就被返回浏览器空页面 
 * 界面不会出现白板,等待后台服务器得到请求后,再去执行完成方法,在方法中填写界面数据的代码 
 * 2.不需要加载整个页面只需要更新局部数据,节省流量,减轻服务器压力 
 * 
 * 为xmlHTTPRequest 设置一个回调函数,服务器数据到达时触发函数,发送请求时可以带少量的参数 
 * 实现按需去数据 
 * 
 $.ajax(),这是jQuery 对ajax的封装的最基础的函数,通过这个函数可以实现异步通讯功能 
 var configObj= { 
// method:数据提交方式 get OR post 
 URL:请求的网址 
 async:是否异步,默认true 
 data:post请求的参数 
 dataType :服务器返回的类型,xml string json 
 success:请求成功后的回调方法 
 error :请求失败后的方法 
 
 } 
 $.ajax(configObj);完成异步请求 
 二、$post()只能采取post请求 
 三、$get() 
 四、$getJSON( url ,完成回调);可以请求本地路径的内容 
 * 
 * 
 * */ 
 $.getJSON("pbl.json",function(data){ 
// console.log(data); 
 for (var i=0;i<data.length;i++) { 
 var music = new Music(); 
 music.src= "音乐播放器资源/" + data[i].src; 
 music.img= "音乐播放器资源/" + data[i].img; 
 music.musicName = data[i].musicName; 
 music.name = data[i].name; 
 music.num = data[i].num; 
 musicModels.push(music); 
  
 } 
 //播放音乐 
 isertData(); 
 player.playMusic(); 
 player.rangUpdate(); 
 $(".music").eq(player.playIndex).addClass("musicPlay") 
 .siblings() 
 .removeClass("musicPlay"); 
 }); 
 function isertData(){ 
 //先要遍历数据源数组 
 /* 
 html5 中添加了一个data-*的方式 来自定义属性 
 用data-前缀,添加到自定义属性名上, 
 这样的结构可以存储少量的数据 
 * */ 
 for (var i=0;i<musicModels.length;i++) { 
// /创建一个DIV元素表示,音乐中的一行,给这个div添加music样式 
//和绑定自定义属性index来记录这个div是列表中的第几行 
 var $musicDiv = $("<div class = 'music' data-index = "+ i +"></div>"); 
// 将这个div添加到musicBox 中 
 $(".musicBox").append($musicDiv); 
// 设计musicdiv中的子元素,子元素有两个,一个是歌曲的图片,歌曲的信息 
// 创建一个img 显示歌曲图片 
 var $img = ( 
 "<img src =" + musicModels[i].img+" />"); 
 $musicDiv.append($img); 
// 创建一个音乐信息的p标签 
 var $musicMsg = $("<p>"+musicModels[i].musicName+" 演唱者:" 
 +musicModels[i].name 
  +"</p>" 
 ); 
 $musicDiv.append($musicMsg); 
  
 } 
 $(".music").click( 
 function(e){ 
  //从被选中的div中读取自定义 index属性 
  
  player.playIndex = $(this ).data("index"); 
  player.playMusic(); 
  //被选中的div设置musicplay样式,该div的兄弟元素要溢出musicplay样式 
  //保证只有一个div有musicplay 
  $(this).addClass("musicPlay").siblings().removeClass("musicPlay"); 
  
  
 } 
 ); 
 } 
 
 $(".play").click(function(){ 
 player.playOrPause(); 
 }); 
 
 $(".next").click(function(){ 
 player.nextMusic(); 
  
  
 }); 
 $(".pre").click(function(){ 
 player.preMusic(); 
  
  
 }); 
 
 
 })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
兼容ie和firefox js关闭代码
Dec 11 Javascript
Extjs中常用表单介绍与应用
Jun 07 Javascript
JQuery在光标位置插入内容的实现代码
Jun 18 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
Jan 04 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 Javascript
angularjs2中父子组件的数据传递的实例代码
Jul 05 Javascript
React中jquery引用的实现方法
Sep 12 jQuery
使用JavaScript中的lodash编写双色球效果
Jun 24 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 #Javascript
聊一聊JS中的prototype
Sep 29 #Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 #Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 #Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 #Javascript
完美解决IE9浏览器出现的对象未定义问题
Sep 29 #Javascript
JSON 对象未定义错误的解决方法
Sep 29 #Javascript
You might like
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
PHP文件与目录操作示例
2016/12/24 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
如何将json数据转换为python数据
2020/09/04 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
专升本自我鉴定
2013/10/10 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
个人投资合作协议书
2014/10/12 职场文书
工作失误检讨书
2015/01/26 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
win7配置本地ftp服务器的图文教程
2022/08/05 Servers