天天看点

FLEX 跑马灯

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>