📄 gllllrc.as
字号:
package com.ll19.sound {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.text.TextFieldAutoSize;
import com.ll19.util.GlllStringUtil;
import com.ll19.util.GlllToolTip;
import com.ll19.util.SetMyMask;
import com.ll19.xml.GlllXML;
/**
* - GL'LL. -
*
*用在LRC-WAVE播放器中
*LRC歌词平滑滚动显示
*
* @author <a href="http://www.LL19.com/">LL19.com</a>
*
*/
public class GlllLrc extends GlllXML {
private var lrcLanguage:String = "";
private var lrcFont:String = "";
private var originLyrics:Array = null;
private var originLyricsBreak:Array = null;
private var lyricsText:Array = null;
private var timeString:Array = null;
private var timeValue:Array = null;
private var myLrc:MovieClip = null;
private var startpoint:int = 0;
private var shownum:int = 3;
private var initx:Number = 0;
private var x0:Number = 0;
private var x1:Number = 0;
private var x2:Number = 0;
private var lrcButton1:MovieClip = null;
private var lrcButton2:MovieClip = null;
private var lrcButton3:MovieClip = null;
private var txt_blur:BlurFilter = null;
private var txt_blur2:BlurFilter = null;
private var pos:Number = 0;
private var temppos:int = 0;
private var ending:int = 0;
private var timet:Number = 0;
private var timen:Number = 0;
private var alpha1:Number = 0;
private var alpha2:Number = 0;
private var s:Number = 0;
private var percentage:Number = 0;
public var removeListener:Boolean = false;
/**
* @param Font 自定义的字体
* @param language LRC中的语言 en或者cn
* @param lrcButton 显示lrc的影片
* @param lrcLink lrc地址
* @param myTip TIP提示对象
* @param myObject this
*
*/
function GlllLrc(lrcLink:String,Lyricsitems:MovieClip,language:String,Font:String,myTip:GlllToolTip,lrcButton:Object) {
lrcLanguage = language;
lrcFont = Font;
myLrc = Lyricsitems;
txt_blur = new BlurFilter(0, 0, 0);
txt_blur2 = new BlurFilter(0, 0, 0);
loadGlllXML(lrcLink);
myLrc.addEventListener(Event.ENTER_FRAME, returnXML);
function returnXML(event:Event):void {
if (XMLState == "complete") {
myLrc.removeEventListener(Event.ENTER_FRAME, returnXML);
lrcButton1 = new lrcButton();
lrcButton2 = new lrcButton();
lrcButton3 = new lrcButton();
lrcButton1.captiontxt.autoSize = TextFieldAutoSize.LEFT;
lrcButton2.captiontxt.autoSize = TextFieldAutoSize.LEFT;
lrcButton3.captiontxt.autoSize = TextFieldAutoSize.LEFT;
lrcButton1.captiontxt.mouseEnabled = false;
lrcButton2.captiontxt.mouseEnabled = false;
lrcButton3.captiontxt.mouseEnabled = false;
lrcButton1.captiontxt.selectable = false;
lrcButton2.captiontxt.selectable = false;
lrcButton3.captiontxt.selectable = false;
if (myLrc.lrclist.getChildByName("lrcButton1")) {
myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton1"));
}
if (myLrc.lrclist.getChildByName("lrcButton2")) {
myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton2"));
}
if (myLrc.lrclist.getChildByName("lrcButton3")) {
myLrc.lrclist.removeChild(myLrc.lrclist.getChildByName("lrcButton3"));
}
lrcButton1.name = "lrcButton1";
lrcButton2.name = "lrcButton2";
lrcButton3.name = "lrcButton3";
myLrc.lrclist.addChild(lrcButton1);
myLrc.lrclist.addChild(lrcButton2);
myLrc.lrclist.addChild(lrcButton3);
lrcButton1.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
lrcButton1.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
lrcButton2.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
lrcButton2.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
lrcButton3.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
lrcButton3.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
//初始影片中 this.Lyricsitems.lrclist的X坐标
initx = myLrc.lrclist.x = 125;
SetMyMask.buildMask(myLrc.lrclist, myLrc.listbg);
loadLrcData(myXML);
myXML = null;
}
if (XMLState == "error") {
myLrc.removeEventListener(Event.ENTER_FRAME, returnXML);
trace("Unable to load requested LRCURL.");
myXML = null;
}
}
function mouseOverHandler(event:MouseEvent):void {
if (lrcLanguage == "cn") {
myTip.showTip(" <font color=\"#CC0000\"><b> Tip </b></font>-- <font size=\"12\">" + event.currentTarget.captiontxt.text + "</font> -- ", 175, 5, " ");
}
else {
myTip.showTip(" <font color=\"#CC0000\"><b> Tip </b></font>-- " + event.currentTarget.captiontxt.text + " -- ", 175, 5, " ");
}
}
function mouseOutHandler(event:MouseEvent):void {
myTip.removeTip();
}
}
//解析成合适队列
private function loadLrcData(lrcXML:XML):void {
originLyrics = new Array;
originLyricsBreak = new Array;
lyricsText = new Array;
timeString = new Array;
timeValue = new Array;
//trace (String.fromCharCode(10));
//trace (String.fromCharCode(13));
originLyrics = lrcXML.toString().split(String.fromCharCode(10));
//根据换行拆分成字符串数组
for (var j:int in originLyrics) {
var originLyricsUnit:Array = originLyrics[j].split("]");
for (var i:int = 0;i <= originLyricsUnit.length - 2; i++) {
//主要是判断多个[]时候从新形成数组
originLyricsBreak.push(originLyricsUnit[i] + "]" + originLyricsUnit[originLyricsUnit.length - 1]);
}
}
originLyricsBreak.sort();
//排序
for (var k:int = originLyricsBreak.length - 1;k >= 0; k--) {
var tempText:String = originLyricsBreak[k].split("]")[1];
lyricsText.unshift(tempText);
var tempTimeString:String = originLyricsBreak[k].split("]")[0].slice(1);
timeString.unshift(tempTimeString);
timeValue.unshift(GlllStringUtil.convertToTime(tempTimeString));
}
myLrc.addEventListener(Event.ENTER_FRAME, moveUp);
}
private function moveUp(event:Event):void {
if (removeListener == true) {
event.currentTarget.removeEventListener(Event.ENTER_FRAME, moveUp);
}
pos = GlllSound.myChannel.position;
//当前播放时间
temppos = 0;
for (var i:int = timeValue.length - 1;i >= 0; i--) {
if (!isNaN(timeValue[i])) {
ending = i;
break;
}
}
for (i = 0;i <= ending; i++) {
if (i == ending || pos <= timeValue[i + 1] * 1000) {
temppos = i;
break;
}
}
startpoint = temppos - Math.floor(shownum / 2);
//歌词渐进渐出
timet = timeValue[temppos + 1] - timeValue[temppos];
timen = timeValue[temppos + 1] - pos / 1000;
lrcButton1.captiontxt.filters = [txt_blur];
alpha1 = (100 * timen / timet) / 100;
lrcButton1.captiontxt.alpha = alpha1;
lrcButton3.captiontxt.filters = [txt_blur];
alpha2 = (100 - 100 * timen / timet) / 100;
lrcButton3.captiontxt.alpha = alpha2;
refreshing();
//移动
s = lrcButton1.captiontxt.width;
percentage = Math.min(1, (pos / 1000 - timeValue[temppos]) / ((isNaN(timeValue[temppos + 1]) ? (timeValue[temppos] + 1) : (timeValue[temppos + 1])) - timeValue[temppos]));
myLrc.lrclist.x = initx - s * percentage;
function refreshing():void {
for (var i:int = 0;i <= shownum - 1; i++) {
if (i == 0) {
setCaption(lrcButton1, lyricsText[i + startpoint]);
}
if (i == 1) {
setCaption(lrcButton2, lyricsText[i + startpoint]);
}
if (i == 2) {
setCaption(lrcButton3, lyricsText[i + startpoint]);
}
}
}
function setCaption(nameNo:MovieClip,capt:String):void {
if (capt == null) {
capt = "<u>GLLL.Lrc.Mp3.Players~http://www.LL19.com/</u>";
}
//让动态文本自适应长度 并且根据其长度连续显示歌词
//trace (String.fromCharCode(13));
capt = GlllStringUtil.remove(capt, String.fromCharCode(13));
x1 = lrcButton1.captiontxt.width;
x2 = lrcButton2.captiontxt.width;
lrcButton1.x = x0;
lrcButton2.x = x1;
lrcButton3.x = x1 + x2;
capt = " - " + capt + " - ";
if (lrcLanguage == "en") {
nameNo.captiontxt.htmlText = "<b>" + capt + "</b>";
}
else if (lrcLanguage == "cn") {
nameNo.captiontxt.htmlText = "<font size=\"12\">" + capt + "</font>";
lrcButton1.y = -0.9;
lrcButton2.y = -0.9;
lrcButton3.y = -0.9;
}
else {
nameNo.captiontxt.htmlText = capt;
}
if (lrcFont != "") {
nameNo.captiontxt.htmlText = "<font " + lrcFont + ">" + capt + "</font>";
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -