基于jQuery实现歌词滚动版音乐播放器的代码


Posted in Javascript onSeptember 17, 2016

先给大家看下效果图,感兴趣的朋友可以参考实现代码

基于jQuery实现歌词滚动版音乐播放器的代码

核心代码如下所示:

$.ajax({
url: "/music/music.txt",
type: "get",
success: function(data) {
data = jQuery.parseJSON(data);
var length = data.length;
var now=0;
for (i = 0; i < length; i++) {
$("#musicText li").eq(i).after("<li>" + data[i].text + "</li>")
}
var player = {
playButton: $(".play"),
songText: $(".musicText"),
state: 0,
//0播放,1暂停
audio: $("#audio").get(0),
bind: function() {
//绑定按钮
//播放或暂停
console.log($.type(this))
console.log($.type(this))
var obj = this;
this.playButton.click(function() {
obj.changeState(obj.state ? 0 : 1);
});
//设置声音
$("#voice").click(function(ex) {
var percent = (ex.clientX - $(this).offset().left) / $(this).width();
obj.setVoice(percent);
});
//默认声音 0.8 
obj.setVoice(1.0);
//静音
$("#voiceOP").click(function() {
if (obj.muted) {
$(this).removeClass("muted");
obj.audio.muted = false;
obj.muted = false;
} else {
$(this).addClass("muted");
obj.audio.muted = true;
obj.muted = true;
}
});
//设置进度
$("#MusicProgress").click(function(ex) {
var percent = (ex.clientX - $(this).offset().left) / $(this).width();
obj.setProgress(percent, false);
});
//上一首
$("#prev").click(function() {
obj.nowIndex--;
if (obj.nowIndex < 0) obj.nowIndex = obj.list.length - 1;
obj.playSing(obj.nowIndex);
});
//下一首
$("#next").click(function() {
obj.nowIndex++;
if (obj.nowIndex >= obj.list.length) obj.nowIndex = 0;
obj.playSing(obj.nowIndex);
player.audio.play();
});
//绑定事件 - 播放时间改变
this.audio.ontimeupdate = function() {
obj.timeChange();
}
//播放结束
this.audio.onended = function() {
obj.singEnd();
}
},
//切换播放状态
changeState: function(_state) {
this.state = _state;
if (!this.state) {
this.playButton.removeClass("pause").addClass("play");
this.pause();
} else {
this.playButton.removeClass("play").addClass("pause");
this.play();
}
},
//播放
play: function() {
this.audio.play();
},
//暂停
pause: function() {
this.audio.pause();
},
timeChange: function() {
var nowSec = Math.floor(this.audio.currentTime);
console.log(nowSec)
console.log(data[now].time)
if(nowSec>data[now].time){
now = now + 1;
console.log(now)
$("#musicText li").eq(now).addClass("active").siblings("li").removeClass("active");
$("#musicText").css("top",-(24*now)+138)
}
var totalSec = Math.floor(this.audio.duration);
//当前进度显示
var secTip = secFormat(nowSec) + "/" + secFormat(totalSec);
if (secTip.length == 11) $("#secTip").html(secTip);
this.setProgress(nowSec / totalSec, true);
},
setVoice: function(percent) {
$("#voice").children(".bar").css("width", percent * 100 + "%");
$("#voice").children("a").css("left", percent * 100 + "%");
this.audio.volume = percent;
},
setProgress: function(percent, justCss) {
$("#MusicProgress").children(".bar").css("width", percent * 100 + "%");
$("#MusicProgress").children("a").css("left", percent * 100 + "%");
if (!justCss) this.audio.currentTime = this.audio.duration * percent;
},
singEnd: function() {
if (this.style == 0) {
this.nowIndex++;
if (this.nowIndex >= this.list.length) this.nowIndex = 0;
this.playSing(this.nowIndex);
} else {
var index = Math.floor(Math.random() * (this.list.length + 1)) - 1;
index = index < 0 ? 0 : index;
index = index >= this.list.length ? (this.list.length - 1) : index;
this.playSing(index);
this.nowIndex = index;
}
},
};
player.bind();
function secFormat(num) {
var m = Math.floor(num / 60);
var s = Math.floor(num % 60);
return makeFormat(m) + ":" + makeFormat(s);
function makeFormat(n) {
if (n >= 10) return n;
else {
return "0" + n;
}
}
}
}
})

然后这里的代码是alpha0.0.1版的,一直在升级ing.

以上所述是小编给大家介绍的基于jQuery实现歌词滚动版音乐播放器的代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的。

Javascript 相关文章推荐
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
微信小程序 本地数据读取实例
Apr 27 Javascript
详解Vue 开发模式下跨域问题
Jun 06 Javascript
原生js+cookie实现购物车功能的方法分析
Dec 21 Javascript
详解vue引入子组件方法
Feb 12 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
js判断请求的url是否可访问,支持跨域判断的实现方法
Sep 17 #Javascript
最全面的JS倒计时代码
Sep 17 #Javascript
jQuery检查元素存在性(推荐)
Sep 17 #Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 #Javascript
Js获取当前日期时间及格式化代码
Sep 17 #Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 #Javascript
jquery遍历标签中自定义的属性方法
Sep 17 #Javascript
You might like
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python自定义线程池实现方法分析
2018/02/07 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
服装设计专业自荐信
2014/06/17 职场文书
五心教育心得体会
2014/09/04 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
优秀党员个人总结
2015/02/14 职场文书
介绍信格式样本
2015/05/05 职场文书
七一慰问简报
2015/07/20 职场文书
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis