/* =================================================== * jqlyric.js v0.1 * shawnk@qq.com * 使用方法 * var $container=$('#lyriccontainer'); //用于显示歌词的容器对象,样式自己定义 * $container.jqlyric({ * lyric:'\ [ti:存在] \ [ar:汪峰] \ [al:存在] \ [by:Love] \ [00:00.00]汪峰 - 存在 \ [00:00.68]多少人走着却困在原地 \ [00:07.93]多少人活着却如同死去', // 歌词字符串,标准lrc文件格式 * speed:1000, // 歌词滚动间隔 (毫秒) * getPosition:function(){ // 获取当前播放位置的函数(返回秒数), 请定义外部函数,不指定本参数则默认从调用插件开始自动播放 * return position; * } * }); * =================================================== * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================== */ (function($) { var gtime = 0; var lyric_listener; $.fn.jqlyric = function(options) { var opts = $.extend({}, $.fn.jqlyric.defaults, options); return this.each(function() { var o = $.meta ? $.extend({}, opts, $this.data()) : opts; var $this = $(this); var arrLyric = new Array(); //放存汉字的歌词 var arrTime = new Array(); //存放时间 var currentLine = 0; //当前活动的歌词行号 // 开始解析歌词 //将歌词解析成数组 var arrly = o.lyric.split('\n'); //console.log(arrly); for (var i = 0; i < arrly.length; i++) { var str = arrly[i]; str = str.substring(str.indexOf("[") + 1, str.indexOf("]")); if (str.indexOf('ti:') > -1 || str.indexOf('ar:') > -1 || str.indexOf('al:') > -1 || str.indexOf('by:') > -1) { // 歌曲特征字段 var tmp = str.substring(str.indexOf(':') + 1); var text = tmp; //tag=tag.replace(/([ti|ar|al|by])/g,''); //arrLyric.push(tag+text); //arrTime.push(toSeconds('00:00:00')); // } else { var text = arrly[i].substring(arrly[i].indexOf("]") + 1); //if(text==''){text=' ';} arrLyric.push(text); //放歌词 arrTime.push(toSeconds(str)); //放时间 } } // 所有歌词按时间顺序排列 for (var k = 0; k < arrTime.length; k++) { for (var j = 0; j < arrTime.length - k; j++) { if (arrTime[j] > arrTime[j + 1]) { temp = arrTime[j]; arrTime[j] = arrTime[j + 1]; arrTime[j + 1] = temp; temp = arrLyric[j]; arrLyric[j] = arrLyric[j + 1]; arrLyric[j + 1] = temp; } } } var arrLyricObj = new Array(); for (var k = 0; k < arrTime.length; k++) { var lrcContent = arrLyric[k]; var len = lrcContent.replace(/(^s*)|(s*$)/g, "").length; //console.log(lrcContent.charCodeAt(0).toString(16)); if (!lrcContent || len == 0) { continue; } var timeStart = arrTime[k]; var timeEnd = k < arrTime.length - 1 ? arrTime[k + 1] - 0.01 : 99999999999999; if (timeEnd < 0) { continue; } var lrc = { timeStart: timeStart, timeEnd: timeEnd, lrcContent: lrcContent }; arrLyricObj.push(lrc); } clearTimeout(lyric_listener); var fadeFinish = true; var timeFun = function() { // 定时检查当前播放进度,作出滚动动作 var pos = o.getPosition(); for (var k = 0; k < arrLyricObj.length; k++) { if (pos >= arrLyricObj[k].timeStart && pos <= arrLyricObj[k].timeEnd) { if ($("#line-current").attr("currentLine") != k && fadeFinish) { if (k > 0) { $("#line-last span").fadeOut(400, function() { var lc = arrLyricObj[k - 1].lrcContent.split("
"); $("#line-last span:eq(0)").text(lc[0]); if (lc.length > 1) { $("#line-last span:eq(1)").text(lc[1]); } if (lc.length > 2) { $("#line-last span:eq(2)").text(lc[2]); } $("#line-last").attr("currentLine", k); $("#line-last span").fadeIn(400, function() { fadeFinish = true; }); }); } if (k < arrTime.length - 1) { $("#line-next span").fadeOut(400, function() { var lc = arrLyricObj[k + 1].lrcContent.split("
"); $("#line-next span:eq(0)").text(lc[0]); if (lc.length > 1) { $("#line-next span:eq(1)").text(lc[1]); } if (lc.length > 2) { $("#line-next span:eq(2)").text(lc[2]); } $("#line-next").attr("currentLine", k); $("#line-next span").fadeIn(400, function() { fadeFinish = true; }); }); } fadeFinish = false; $("#line-current span").fadeOut(400, function() { var lc = arrLyricObj[k].lrcContent.split("
");//console.log(lc); $("#line-current span:eq(0)").text(lc[0]); if (lc.length > 1) { $("#line-current span:eq(1)").text(lc[1]); } if (lc.length > 2) { $("#line-current span:eq(2)").text(lc[2]); } $("#line-current").attr("currentLine", k); $("#line-current span").fadeIn(400, function() { fadeFinish = true; }); }); break; } } } lyric_listener = setTimeout(timeFun, o.speed); }; lyric_listener = setTimeout(timeFun, o.speed); }); }; $.fn.jqlyric.defaults = { lyric: '[00:00.00]未找到歌词', // 歌词字符串 (lrc格式) speed: 500, // 歌词进度一首歌间隔(毫秒) getPosition: function() { // 获取播放器当前播放位置 gtime += 0.5; return gtime; } } function toSeconds(t) { //把形如:01:25的时间转化成秒; var m = t.substring(0, t.indexOf(":")); var s = t.substring(t.indexOf(":") + 1); s = parseInt(s.replace(/\b(0+)/gi, "")); if (isNaN(s)) s = 0; var totalt = parseInt(m) * 60 + s; //alert(parseInt(s.replace(/\b(0+)/gi,""))); if (isNaN(totalt)) return 0; return totalt; } })(jQuery); $(function() { var audio = document.getElementById("audio"); if (!audio) { return; } var fun_getPosition = function() { return audio.currentTime; } var url = audio.currentSrc; var urlArr = url.split('?'); var k = urlArr[0], appU = k.split('/'); var srcFileExt = appU[appU.length - 1].split('.')[1]; url = url.replace("." + srcFileExt, ".lrc"); var url = "http://122.114.50.251:8010/getJSON.php?callback=?&url=" + (url); var $container = $('#lyriccontainer'); $('#lyricFullscreen').click(function(event) { var element = $container[0]; audio.play(); // 判断浏览器前缀 if (document.fullscreenEnabled) { if (element.requestFullscreen) { element.requestFullscreen(); } else if (element.mozRequestFullScreen) { element.mozRequestFullScreen(); } else if (element.webkitRequestFullscreen) { element.webkitRequestFullscreen(); } else if (element.msRequestFullscreen) { element.msRequestFullscreen(); } } }); //console.log(url); $.getJSON(url, function(data) { var lrcContent = data.data; //console.log(lrcContent); if (!lrcContent || lrcContent == "") { return; } //用于显示歌词的容器对象,样式自己定义 $container.jqlyric({ lyric: lrcContent, // 歌词字符串,标准lrc文件格式 getPosition: fun_getPosition }); }); var noSleep = new NoSleep(); var btn_lyricNoslep=document.getElementById("lyricNoslep"); if(btn_lyricNoslep){ btn_lyricNoslep.addEventListener('click', function enableNoSleep() { if(btn_lyricNoslep.innerHTML=='禁止熄屏'){ btn_lyricNoslep.innerHTML='允许熄屏'; //btn_lyricNoslep.removeEventListener('click', enableNoSleep, false); noSleep.enable(); }else{ btn_lyricNoslep.innerHTML='禁止熄屏'; noSleep.disable(); } }, false); } var btn_lyricBigger=document.getElementById("lyricBigger"); if(btn_lyricBigger){ btn_lyricBigger.addEventListener('click', function () { var size=getComputedStyle($('#lyriccontainer')[0],false)['font-size']; var num=parseInt(size.substring(0,size.indexOf("px")));console.log(size); num+=2; var unit="px"; size=num+unit; $('#lyriccontainer')[0].style.fontSize=size; }, false); } var btn_lyricSmaller=document.getElementById("lyricSmaller"); if(btn_lyricSmaller){ btn_lyricSmaller.addEventListener('click', function () { var size=getComputedStyle($('#lyriccontainer')[0],false)['font-size']; var num=parseInt(size.substring(0,size.indexOf("px")));console.log(size); num-=2; var unit="px"; size=num+unit; $('#lyriccontainer')[0].style.fontSize=size; }, false); } });