基于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 tab 选项卡
Apr 26 Javascript
JS获取父节点方法
Aug 20 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
Jul 28 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
基于JS实现一个随机生成验证码功能
May 29 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 Javascript
解决Vue大括号字符换行踩的坑
Nov 09 Javascript
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
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
js+canvas绘制五角星的方法
2016/01/28 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
老生常谈js数据类型
2017/08/03 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
Python科学计算之NumPy入门教程
2017/01/15 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
python正则表达式实例代码
2020/03/03 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
领导干部失职检讨书
2015/05/05 职场文书
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python