📄 lrc.js
字号:
///////////////////////////////////////////////////////////////////
// Author:daong | E-mail: dahongy@gmail.com
// Copyright © Http://www.phpstcms.cn
// This is not a free software, please to pay for more functions
// $Id: 2009-05-01 version V2.5 $
///////////////////////////////////////////////////////////////////
var LrcShow = {
gsh:"歌手:~1~\n曲名:~2~\n专辑:~3~\n编者:~4~",
inr:[], //行
oTime:0, //余补时间
hailang:false,
dts:-1, //当前行显示的s
dte:-1, //当前行显示的e
dlt:-1, //当前行
ddh:false, //当前行数据
fjh:false,
haohaiplay:{},
oceanx:0,
lrcText:"",
start:function(lrc,obj)
{
if(lrc == "")
{
var tt = "[00:01.00]STCMS MUSIC SYSTEM[00:03.00]HTTP://www.phpstcms.cn[00:05.00]STCMS 音乐系统 歌词正在加载中……";
}
else
{
var tt = lrc;
}
this.inr=Array();
obj = obj ? obj : "MPlayer";
this.print("正在加载中……");
$$("lrcwt1").innerText = "";
$$("lrcwt2").innerText = "";
$$("lrcwt3").innerText = "";
$$("lrcwt4").innerText = "";
$$("lrcwt5").innerText = "";
$$("lrcwt6").innerText = "";
$$("lrcwt7").innerText = "";
$$("lrcwt8").innerText = "";
this.haohaiplay = $$(obj);
if(/\[offset\:(\-?\d+)\]/i.test(tt)) //取offset余补时间
this.oTime = RegExp.$1/1000;
tt = tt.replace(/\[\:\][^$\n]*(\n|$)/g,"$1"); //去掉注解
tt = tt.replace(/\[[^\[\]\:]*\]/g,"");
tt = tt.replace(/\[[^\[\]]*[^\[\]\d]+[^\[\]]*\:[^\[\]]*\]/g,"");
tt = tt.replace(/\[[^\[\]]*\:[^\[\]]*[^\[\]\d\.]+[^\[\]]*\]/g,"");
tt = tt.replace(/<[^<>]*[^<>\d]+[^<>]*\:[^<>]*>/g,"");
tt = tt.replace(/<[^<>]*\:[^<>]*[^<>\d\.]+[^<>]*>/g,""); //去掉除时间标签的其它标签
while(/\[[^\[\]]+\:[^\[\]]+\]/.test(tt))
{
tt = tt.replace(/((\[[^\[\]]+\:[^\[\]]+\])+[^\[\r\n]*)[^\[]*/,"\n");
var zzzt = RegExp.$1;
/^(.+\])([^\]]*)$/.exec(zzzt);
var ltxt = RegExp.$2;
var eft = RegExp.$1.slice(1,-1).split("][");
for(var ii=0; ii<eft.length; ii++)
{
var sf = eft[ii].split(":");
var tse = parseInt(sf[0],10) * 60 + parseFloat(sf[1]);
var sso = { t:[] , w:[] , n:ltxt }
sso.t[0] = tse-this.oTime;
this.inr[this.inr.length] = sso;
}
}
this.inr = this.inr.sort( function(a,b){return a.t[0]-b.t[0];} );
for(var ii=0; ii<this.inr.length; ii++)
{
while(/<[^<>]+\:[^<>]+>/.test(this.inr[ii].n))
{
this.inr[ii].n = this.inr[ii].n.replace(/<(\d+)\:([\d\.]+)>/,"%=%");
var tse = parseInt(RegExp.$1,10) * 60 + parseFloat(RegExp.$2);
this.inr[ii].t[this.inr[ii].t.length] = tse-this.oTime;
}
$$("lrcbc").innerHTML = "<font>"+ this.inr[ii].n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/%=%/g,"</font><font>") +" </font>";
var fall = $$("lrcbc").getElementsByTagName("font");
for(var wi=0; wi<fall.length; wi++)
this.inr[ii].w[this.inr[ii].w.length] = fall[wi].offsetWidth;
this.inr[ii].n = $$("lrcbc").innerText;
}
this.lrcText == "";
for(var i=0; i<this.inr.length; i++)
{
this.lrcText += this.retxt(i)+"<br>";
}
this.lrcText = this.lrcText ? this.lrcText : lrc;
if(this.inr)
{
setInterval("LrcShow.run();",10);
}
else
{
this.lrcText = lrc.replace("\n","<br>");
this.lrcText = this.lrcText.replace("\r","<br>");
this.lrcText = this.lrcText.replace(" "," ");
this.showTxt();
}
},
run:function()
{
if(!this.haohaiplay)
{
return false;
}
if(this.oceanx==0)
{
this.running(this.haohaiplay.controls.currentPosition, this.haohaiplay.currentMedia.duration);
}
else
{
this.running(this.haohaiplay.GetPosition()/1000, this.haohaiplay.GetLength()/1000);
}
},
running:function(tme, plen)
{
if(tme<this.dts || tme>=this.dte)
{
var ii;
for(ii=this.inr.length-1; ii>=0 && this.inr[ii].t[0]>tme; ii--){}
if(ii<0) return;
this.ddh = this.inr[ii].t;
this.fjh = this.inr[ii].w;
this.dts = this.inr[ii].t[0];
this.dte = (ii<this.inr.length-1)?this.inr[ii+1].t[0]:plen;
$$("lrcwt1").innerText = this.retxt(ii-4);
$$("lrcwt2").innerText = this.retxt(ii-3);
$$("lrcwt3").innerText = this.retxt(ii-2);
$$("lrcwt4").innerText = this.retxt(ii-1);
$$("lrcwt5").innerText = this.retxt(ii+1);
$$("lrcwt6").innerText = this.retxt(ii+2);
$$("lrcwt7").innerText = this.retxt(ii+3);
$$("lrcwt8").innerText = this.retxt(ii+4);
this.print(this.retxt(ii));
if(this.dlt==ii-1)
{
clearTimeout(this.hailang);
this.golrcoll(0);
}
this.dlt = ii;
}
var bbw = 0;
var ki;
for(ki=0; ki<this.ddh.length && this.ddh[ki]<=tme; ki++)
bbw += this.fjh[ki];
var kt = ki-1;
var sc = ((ki<this.ddh.length)?this.ddh[ki]:this.dte) - this.ddh[kt];
var tc = tme - this.ddh[kt];
bbw -= this.fjh[kt] - tc / sc * this.fjh[kt];
if(bbw>$$("lrcbox").offsetWidth)
bbw = $$("lrcbox").offsetWidth;
$$("lrcbc").style.width = Math.round(bbw);
},
retxt:function(i)
{
return (i<0 || i>=this.inr.length)?"":this.inr[i].n;
},
print:function(txt)
{
$$("lrcbox").innerText = txt;
$$("lrcbc").innerText = txt;
},
golrcoll:function(s)
{
$$("lrcoll").style.top = 25-(s++)*3;
$$("lrcwt1").filters.alpha.opacity = 90-s*18;
$$("lrcwt5").filters.alpha.opacity = s*18+10;
if(s<=5)
this.hailang = setTimeout("LrcShow.golrcoll("+s+")",120);
},
showTxt:function()
{
$$("lrc_show_text").innerHTML = this.lrcText;
},
showMoive:function()
{
$$("lrc_show_text").innerHTML = "";
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -