基于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父窗口控制只弹出一个子窗口
Apr 10 Javascript
select组合框option的捕捉实例代码
Sep 30 Javascript
jquery last-child 列表最后一项的样式
Jan 22 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
js实现拉幕效果的广告代码
Sep 02 Javascript
用js读写cookie的简单方法(推荐)
Aug 08 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
js实现的在本地预览图片功能示例
Nov 09 Javascript
五句话帮你轻松搞定js原型链
Dec 09 Javascript
vue实现可拖拽的dialog弹框
May 13 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
文章推荐系统(二)
2006/10/09 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
python遍历小写英文字母的方法
2019/01/02 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
教师敬业奉献模范事迹材料
2014/05/18 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏