基于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 相关文章推荐
动态刷新 dorado树的js代码
Jun 12 Javascript
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
Aug 23 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
js实现简单的手风琴效果
Feb 27 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 Javascript
VUE使用vuex解决模块间传值问题的方法
Jun 01 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
基于layui数据表格以及传数据的方式
Aug 19 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
php调用shell的方法
2014/11/05 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
Vue.js用法详解
2017/11/13 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
Vue.js中的组件系统
2019/05/30 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python工程师面试题 与Python Web相关
2016/01/14 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Python实现代码统计工具
2019/09/19 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
python字符串下标与切片及使用方法
2020/02/13 Python
python可迭代对象去重实例
2020/05/15 Python
利用python 下载bilibili视频
2020/11/13 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
爱国演讲稿500字
2014/05/04 职场文书
健康教育评估方案
2014/05/25 职场文书
2014年就业工作总结
2014/11/26 职场文书
活动宣传稿范文
2015/07/23 职场文书
谢师宴家长致辞
2015/07/27 职场文书
清洁工工作总结
2015/08/11 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python