Flex “跑马灯”效果
自定义类(BroadCastMarquee.as):
package marquee
{
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.utils.Timer;
import mx.core.UIComponent;
public class BroadCastMarquee extends UIComponent
{
[Bindable]
private var broadcastText:String="broadcast message";
private var m_timer:Timer;
private var m_DefaultText_X:Number=0;
//每次移动距离
private var m_step:Number=10;
//滚动范围
private var m_rect:Rectangle;
//移动时间间隔
private var t_delay:Number=100;
//广播信息滚动宽度
private var m_Width:Number;
//滚动方向属性
[Inspectable(defaultValue="left",enumeration="right,left", category="direction", type="String")]
public var ScrollDirection:String="left";
//显示内容样式
[Bindable]
private var m_TextFormat:TextFormat=new TextFormat("Verdana","10","#0b333c");
private var m_BroadCastText:TextField;
// private var m_BroadcastLabel:Label;
public function BroadCastMarquee()
{
super();
InitBroadcast();
addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler);
addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
}
private function InitBroadcast():void
{
m_BroadCastText=new TextField();
m_BroadCastText.autoSize=TextFieldAutoSize.LEFT;
m_BroadCastText.multiline=false;
m_BroadCastText.selectable=false;
m_BroadCastText.x=m_BroadCastText.y=m_DefaultText_X
m_BroadCastText.wordWrap=false;
m_BroadCastText.text=broadcastText;
//m_BroadCastText.defaultTextFormat=m_TextFormat;
addChild(m_BroadCastText);
this.m_Width=this.width;
m_rect=new Rectangle(0,0,this.width,this.m_BroadCastText.textHeight);
this.m_BroadCastText.scrollRect=m_rect;
m_timer = new Timer(t_delay);
ScrollBroadText();
}
private function ScrollBroadText():void
{
if(this.m_timer!=null)
{
//停止移动
StopMoveBroadcast();
if(this.broadcastText!="")
{
m_timer.addEventListener(TimerEvent.TIMER, timerhandler);
m_timer.start();
}
// Math.abs(
}
}
private function timerhandler(evt:TimerEvent):void
{
if(this.m_BroadCastText.textWidth>0)
{
if(ScrollDirection.toLowerCase()=="left")
{
if(m_rect.x<=this.m_BroadCastText.textWidth)
{
// this.m_BroadCastText.x+=(-this.m_step);
m_rect.x+=this.m_step;
}else
{
//this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth;
m_rect.x=-(m_DefaultText_X+this.m_Width);
}
}else
{
if(Math.abs(m_rect.x)<=this.m_BroadCastText.textWidth)
{
m_rect.x-=this.m_step;
}else
{
this.m_rect.x=m_DefaultText_X;
}
}
m_BroadCastText.scrollRect = m_rect;
}else
{
//停止移动
StopMoveBroadcast();
}
}
private function StopMoveBroadcast():void
{
if(m_timer!=null)
{
this.m_timer.stop();
if(m_timer.hasEventListener(TimerEvent.TIMER))
m_timer.removeEventListener(TimerEvent.TIMER, timerhandler);
m_BroadCastText.x=this.m_DefaultText_X;
m_rect.height = m_BroadCastText.height;
// this.height=m_rect.height;
m_BroadCastText.scrollRect = m_rect;
}
}
protected function rollOverHandler(event:MouseEvent):void
{
if(this.m_timer!=null&&this.broadcastText!="")
{
this.m_timer.stop();
}
}
protected function rollOutHandler(event:MouseEvent):void
{
if(this.m_timer!=null&&this.broadcastText!="")
{
this.m_timer.start();
}
}
public function set BroadCastDeplay(value:Number):void
{
this.m_timer.delay=value;
}
public function set BroadCastText(value:String):void
{
this.m_BroadCastText.text=value;
ScrollBroadText();
}
public function get BroadCastText():String
{
return this.broadcastText;
}
public override function get width():Number
{
return this.m_Width;
}
public override function set width(width:Number):void
{
this.m_Width=width;
this.m_rect.width=this.m_Width;
this.m_BroadCastText.scrollRect=this.m_rect;
ScrollBroadText();
// this.m_BroadCastText.setTextFormat
}
public function set Direction(value:String):void
{
this.ScrollDirection=value;
ScrollBroadText();
}
public function set defaultTextFormat(format:TextFormat):void
{
this.m_BroadCastText.defaultTextFormat=format;
this.setTextFormat(format);
//
}
public function setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
{
m_BroadCastText.setTextFormat(format, beginIndex, endIndex);
ScrollBroadText();
}
public function set fontSize(value:Object):void
{
this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value,this.m_TextFormat.color);
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}
public function set fontFamily(value:String):void
{
this.m_TextFormat=new TextFormat(value,this.m_TextFormat.size,this.m_TextFormat.color);
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}
public function set color(value:Object):void
{
this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,value);
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}
public function set fontWeight(value:Object):void
{
this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,this.m_TextFormat.color,value)
this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
}
}
}
TestBroadCastMarquee.mxml :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" xmlns:marquee="marquee.*">
<marquee:BroadCastMarquee width="500" height="25" BroadCastDeplay="800" BroadCastText="公告:火爆商品等你拿!" ScrollDirection="left">
</marquee:BroadCastMarquee>
</mx:Application>