1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| /**
* 歌词控制器
*
* 我认为在歌词控制中,不停循环遍历数组当然是可以的,不过这样显然太过浪费性能了
* 事实上我们只需要在重定位的时候遍历一遍数组获得新的index就好了,判断总比循环节省时间吧
* 以下方法麻烦了点,但是基于这个思路制作lrc控制器也是可以的
* 当然咯改成遍历肯定要灵活一些,个人习惯不同
* @author icepro
* @Time 2016-3-10 11:13:55
*/
function lrcControl(){
var lrcs = new Array(),
nowPlay = 0,
offset = 0,
speed = 0;
/* 其中offset偏移时间和动画速率speed还未列入需求 */
var ini = function(){
var lrcs = new Array(),
nowPlay = 0,
offset = 0,
speed = 0;
}
// 设置lrc,lrc格式必须为数组[{song:XXXX,time:[00:00.00]}]格式,判断也是
// 如此,所以传入前必须先通过一个解释器统一格式
var setLrc = function(lrc){
lrcs = lrc;
}
// 获得所有的lrc,输出的lrc是经过排序的
var getAllLrc = function(){
return lrcs;
}
// 判断是否需要播放下一节
var canPlayNext = function(nowtime){
nowtime = "["+nowtime+"]";
// console.log(nowtime+":"+lrcs[nowPlay].time);
if(nowtime.localeCompare(lrcs.length>nowPlay&&lrcs[nowPlay].time)>=0){
nowPlay += 1;
console.log(lrcs[nowPlay-1].song);
}else{
return false;
}
}
// 获得现在播放的index次序,在angular下不对数组后续操作重排的话直接可以使用$index即可替换class
var getThisPlay = function(){
return nowPlay;
}
// 重新计算lrc位置
var reCalculate = function(nowtime){
nowtime = "["+nowtime+"]";
$.each(lrcs,function(i,item){
if(nowtime.localeCompare(item.time)>=0)
return (nowPlay = (i-1<0?0:i-1));
});
}
return {
setLrc:setLrc,
reCalculate:reCalculate,
getThisPlay:getThisPlay,
getAllLrc:getAllLrc,
canPlayNext:canPlayNext,
}
}
|