基于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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
防止动态加载JavaScript引起的内存泄漏问题
Oct 08 Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
Mar 04 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
原生js轮播特效
May 18 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
vue 根据选择条件显示指定参数的例子
Nov 09 Javascript
vue之debounce属性被移除及处理详解
Nov 13 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
使用jquery实现简单的ajax
2013/07/08 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
angular分页指令操作
2017/01/09 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
小区门卫工作职责
2013/12/14 职场文书
书法培训心得体会
2014/01/05 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
办公设备采购方案
2014/03/16 职场文书
小露珠教学反思
2014/04/30 职场文书
幼儿园感谢信
2015/01/21 职场文书
信仰纪录片观后感
2015/06/08 职场文书