📄 test.js
字号:
/**
* JS临时测试文件
*
*/
var tbuy_embed;
var tbuy_player; // 播放器
var tbuy_out1; // 当前歌词的输出区
var tbuy_out1_width; // out1的可用最大宽度
var tbuy_out2; // 所有歌词的输出区
var tbuy_out2_height; // out2的初始高度
var tbuy_curTime; // 播放器的当前时间
var request; // XMLHttp请求
var lrcArr = new Array(); // 歌词文件的数组形式,格式为[00:00]我对你爱不完
var timeArr = new Array(); // 时间数组
var nowStr; // 正在播放的歌词
// go...参数clientId组件ID, lrcAdd 歌词的地址
function onloadStart(clientId, lrcAdd) {
tbuy_embed = getObj(clientId);
tbuy_player = getObj(clientId + ":player");
tbuy_out1 = getObj(clientId + ":out1");
tbuy_out2 = getObj(clientId + ":out2");
tbuy_curTime = getObj(clientId + ":curTime");
//tbuy_out1.style.background = "#FFFFFF";
displayLrc(lrcAdd);
tracePlayer(); // 跟踪播放器
}
// 获取页面组件
function getObj(objName){
try {
if (document.getElementById) {
return eval('document.getElementById("'+objName+'")');
} else {
return eval('document.all.'+objName);
}
}
catch(e){}
}
// 跟踪播放器
function tracePlayer() {
var pos = tbuy_player.controls.currentPositionString;
tbuy_curTime.innerHTML = "[" + pos + "]";
if ((word = lrcArr[pos]) != null) {
tbuy_out1.innerHTML = word;
tbuy_out1.style.width = 20;
// 将播放完的歌词清除颜色并
// 重新设置正在播放的歌词颜色
if (nowStr != null) {
nowStr.style.fontSize = "";
nowStr.style.color = "";
}
nowStr = getObj(pos);
nowStr.style.fontSize = "17px";
nowStr.style.color = "red";
// 这一步只是让歌词出现得动感一点 :)
displayCurLine();
}
setTimeout("tracePlayer()", 1000);
tbuy_out1_width = tbuy_embed.offsetWidth
- tbuy_player.offsetWidth
- tbuy_curTime.offsetWidth - 16;
}
// 让当前行歌词看起来像逐字出现
function displayCurLine() {
if (tbuy_out1.offsetWidth < tbuy_out1_width) {
tbuy_out1.style.width = tbuy_out1.offsetWidth + 20 + "px";
setTimeout("displayCurLine()", 30);
}
}
/************************************************************
* 显示所有歌词,让tbuy_out2显示出来
*/
var widthUp = 100;
function showAllLyrics() {
// 如果没有可用歌词文件,则不预响应
if (timeArr.length <= 0) {
return;
}
if (tbuy_out2.style.display == "none") {
tbuy_out2.style.width = 0;
tbuy_out2.style.height = 0;
tbuy_out2.style.display = "";
displayOut2();
} else {
displayOut2Hidden();
}
}
// 显示
function displayOut2() {
var wOk = 0;
var hOk = 0;
if (tbuy_out2.offsetWidth < tbuy_embed.offsetWidth) {
tbuy_out2.style.width = tbuy_out2.offsetWidth + widthUp + "px";
} else {
wOk = 1;
}
if (tbuy_out2.offsetHeight < tbuy_out2_height) {
tbuy_out2.style.height = tbuy_out2.offsetHeight
+ tbuy_out2_height/(tbuy_embed.offsetWidth/widthUp) + "px";
} else {
hOk = 1;
}
if (wOk != 1 || hOk != 1) {
setTimeout("displayOut2()", 20);
} else {
tbuy_out2.style.width = tbuy_embed.offsetWidth - 6 + "px";
tbuy_out2.style.height = tbuy_out2_height;
}
}
// 收缩
function displayOut2Hidden() {
var wOk = 0;
var hOk = 0;
var widthLow = tbuy_out2.offsetWidth - widthUp;
var heightLow = tbuy_out2.offsetHeight
- tbuy_out2_height / (tbuy_embed.offsetWidth / widthUp);
if (tbuy_out2.offsetWidth > 0 && widthLow >= 0) {
tbuy_out2.style.width = widthLow + "px";
} else {
wOk = 1;
}
if (tbuy_out2.offsetHeight > 0 && heightLow >= 0) {
tbuy_out2.style.height = heightLow + "px";
} else {
hOk = 1;
}
if (wOk != 1 || hOk != 1) {
setTimeout("displayOut2Hidden()", 20);
} else {
tbuy_out2.style.display = "none";
}
}
/** 关于歌词文件的下载,分析,及处理
*****************************************************************************/
// NO1.开始请求歌词
function displayLrc(lrcAdd) {
var action = "/tbuy/TbuyExtension/lrc=" + lrcAdd;
try {
request = new XMLHttpRequest();
} catch (e) {
var xmlVersions = new Array('MSXML2.XMLHTTP.7.0',
'MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i = 0; i < xmlVersions.length && !request; i++) {
try {
request = new ActiveXObject(xmlVersions[i]);
} catch (e) {
alert("error");
}
}
}
request.open("GET", action, true);
try {
request.onreadyStatechange = processRequest(); // IE7
} catch (e) {
request.onreadyStatechange = processRequest; // IE5,IE6
}
request.send();
}
// NO2.处理请求动作
function processRequest() {
var state = request.readyState;
if (state == 1) {
tbuy_out1.innerHTML = "<font color=yellow>正在缓冲,查找歌词...</font>";
}
if (state == 2) {
tbuy_out1.innerHTML = "<font color=yellow>正在加载歌词...</font>";
}
if (state == 4) {
if (request.status == 200) {
showRequest();
} else {
tbuy_out1.innerHTML = "<font color=red>找不到歌词!</font>";
}
} else {
setTimeout("processRequest()", 1000);
}
}
// NO3.获得回传数据之后
function showRequest() {
var result = request.responseText;
parseResult(result);
}
// NO4.分析lrc歌词文件
function parseResult(text) {
var temp = new Array();
temp = text.split("\n");
for (var i = 0; i < temp.length; i++) {
// 分析每一行
parseLine(temp[i]);
}
showLrc(); // 输出歌词
}
// NO4.1 第四步的拆行,单独分析每一行
function parseLine(text) {
if (text == "" || text == null) return;
// 获取歌词标题
if (text.indexOf("[ti:") != -1) {
var start = text.indexOf("[ti:") + 4;
var end = text.indexOf("]");
lrcArr["ti"] = text.substring(start, end);
return;
}
// 获取演唱者
if (text.indexOf("[ar:") != -1) {
var start = text.indexOf("[ar:") + 4;
var end = text.indexOf("]");
lrcArr["ar"] = text.substring(start, end);
return;
}
// 作曲
if (text.indexOf("[al:") != -1) {
var start = text.indexOf("[al:") + 4;
var end = text.indexOf("]");
lrcArr["al"] = text.substring(start, end);
return;
}
// by
if (text.indexOf("[by:") != -1) {
var start = text.indexOf("[by:") + 4;
var end = text.indexOf("]");
lrcArr["by"] = text.substring(start, end);
return;
}
// 开始获取正式歌词及时间
var temp = text.split("]");
var wordStr = temp[temp.length-1];
for (var i = 0; i < temp.length - 1; i++) {
var tempStr = temp[i];
var start = tempStr.indexOf("[") + 1;
var end = tempStr.indexOf(".");
var timeStr = tempStr.substring(start, end);
timeArr.push(timeStr); // 时间数组
lrcArr[timeStr] = wordStr; // 时间及歌词数组
}
}
// NO5 测试显示结果
function showLrc() {
// 对时间数组进行排序,顺便测试一下排序时间
if (timeArr.length <= 0) {
tbuy_out1.innerHTML = "<font color=red>找不到歌词!</font>";
return;
}
timeArr = QuickSort(timeArr);
// 依时间顺序输出
tbuy_out2.style.display = "";
tbuy_out2.innerHTML += "<div>歌曲:" + lrcArr["ti"] + "</div>";
tbuy_out2.innerHTML += "<div>演唱:" + lrcArr["ar"] + "</div>";
for (var i = 0; i < timeArr.length; i++) {
var time = timeArr[i]
tbuy_out2.innerHTML += "<div id=" + time + ">" + lrcArr[time] + "</div>";
}
// 取得out2的初始高度
tbuy_out2_height = tbuy_out2.offsetHeight;
tbuy_out2.style.display = "none";
}
// 关于排序
function QuickSort(arr) { //交换排序->快速排序
if (arguments.length > 1) {
var low = arguments[1];
var high = arguments[2];
} else {
var low = 0;
var high = arr.length - 1;
}
if(low < high) {
var i = low;
var j = high;
var pivot = arr[i];
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
while (i < j && arr[i] <= pivot) i++;
if (i < j) arr[j--] = arr[i];
}//endwhile
arr[i] = pivot;
var pivotpos = i;
QuickSort(arr, low, pivotpos-1);
QuickSort(arr, pivotpos+1, high);
} else {
return;
}
return arr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -