基于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 相关文章推荐
JavaScript在多浏览器下for循环的使用方法
Nov 07 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
jquery的live使用注意事项
Feb 18 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
Vue常用指令详解分析
Aug 19 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
VUE 动态组件的应用案例分析
Dec 02 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
PHP 加密与解密的斗争
2009/04/17 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python生成带有表格的图片实例
2019/02/03 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python 处理文件的几种方式
2019/08/23 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
参观接待方案
2014/03/17 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
学生病假条范文
2015/08/17 职场文书
python tkinter模块的简单使用
2021/04/07 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android