AS3 MarqueeText跑马灯文本类 【转载】



 

1 /***
2 * MargueeText工具,跑马灯文本
3 * 功能:
4 * 1.直接将某TextField转换为跑马灯文本 changeTextFieldToMarqueeText
5 * 2.动态设定显示宽度 width
6 * 3.动态设定一次移动间隔时间 delay
7 * 4.动态设定一次移动间隔距离 step
8 * 5.设定默认文本显示样式 defaultTextFormat
9 * 6.动态设定文本显示样式 setTextFormat
10 ***/
11 package cn.asarea.tool
12 {
13 import flash.display.Sprite;
14 import flash.events.TimerEvent;
15 import flash.geom.Rectangle;
16 import flash.text.TextField;
17 import flash.text.TextFieldAutoSize;
18 import flash.text.TextFormat;
19 import flash.utils.Timer;
20
21 public class MarqueeText extends Sprite
22 {
23 private var m_rect:Rectangle;
24 private var m_txt:TextField;
25 private var m_timer:Timer;
26 //每次移动距离
27   private var m_step:Number;
28 //左移右移tmpflag
29   private var m_bleftflag:Boolean;
30 //
31 public function MarqueeText(text:String="", width:Number=100, delay:Number=1000, step:Number=10)
32 {
33 super();
34 //
35 m_txt = new TextField();
36 m_txt.x = m_txt.y = 0;
37 m_txt.selectable = false;
38 m_txt.wordWrap = false;
39 m_txt.multiline = false;
40 m_txt.autoSize = TextFieldAutoSize.LEFT;
41 m_txt.text = text;
42 addChild(m_txt);
43 //
44 m_rect = new Rectangle(0, 0, width, m_txt.height);
45 m_txt.scrollRect = m_rect;
46 //
47 m_timer = new Timer(delay);
48 m_step = step;
49 m_bleftflag = true;
50 //
51 checkNeedTimer();
52 }
53 //只要是有可能改变文本的宽度或者scrollrect宽度的方法都应该调用该方法以刷新走马灯
54 private function checkNeedTimer():void
55 {
56 //reset
57 m_timer.stop();
58 if(m_timer.hasEventListener(TimerEvent.TIMER))
59 m_timer.removeEventListener(TimerEvent.TIMER, timerhandler);
60 m_rect.x = 0;
61 m_rect.height = m_txt.height;
62 m_txt.scrollRect = m_rect;
63 m_bleftflag = true;
64 //test and set
65 if(m_rect.width < m_txt.textWidth)
66 {
67 m_timer.addEventListener(TimerEvent.TIMER, timerhandler);
68 m_timer.start();
69 }
70 }
71 private function timerhandler(evt:TimerEvent):void
72 {
73 if(m_bleftflag)
74 {
75 if((m_rect.x + m_rect.width) < m_txt.textWidth)
76 m_rect.x += m_step;
77 else
78 m_bleftflag = false;
79 }
80 else
81 {
82 if(m_rect.x > 0)
83 m_rect.x -= m_step;
84 else
85 m_bleftflag = true;
86 }
87 //
88 m_txt.scrollRect = m_rect;
89 }
90 public function set text(text:String):void
91 {
92 m_txt.text = text;
93 checkNeedTimer();
94 }
95 public function get text():String
96 {
97 return m_txt.text;
98 }
99 public function set delay(delay:Number):void
100 {
101 m_timer.delay = delay;
102 }
103 public function set step(step:Number):void
104 {
105 m_step = step;
106 }
107 public override function set width(width:Number):void
108 {
109 m_rect.width = width;
110 m_txt.scrollRect = m_rect;
111 checkNeedTimer();
112 }
113 public function set defaultTextFormat(format:TextFormat):void
114 {
115 m_txt.defaultTextFormat = format;
116 setTextFormat(format);
117 }
118 public function setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
119 {
120 m_txt.setTextFormat(format, beginIndex, endIndex);
121 checkNeedTimer();
122 }
123 //直接把textfield转换为margueetext,对于一些中文字体用textformat无法正常显示的情况此方法特别有效,只需在舞台上建立一个中文字体的文本框转换过来
124 public static function changeTextFieldToMarqueeText(tf:TextField, width:Number=100, delay:Number=1000, step:Number=10):MarqueeText
125 {
126 var returnMT:MarqueeText = new MarqueeText("", width, delay, step);
127 with(returnMT)
128 {
129 removeChild(m_txt);
130 m_txt = tf;
131 m_txt.selectable = false;
132 m_txt.wordWrap = false;
133 m_txt.multiline = false;
134 m_txt.autoSize = TextFieldAutoSize.LEFT;
135 checkNeedTimer();
136 }
137 return returnMT;
138 }
139 }
140 }
141

 

使用示例:

1 import cn.asarea.tool.MarqueeText;
2
3 var MTA:MarqueeText = new MarqueeText("欢迎访问小鱼as3学习笔记 http://www.manyu.cn/blog", 200);
4 MTA.x = 100;
5 MTA.y = 100;
6 addChild(MTA);
7 var myformat:TextFormat = new TextFormat("宋体",20,0x000000);
8 MTA.defaultTextFormat = myformat;
9 //MTA.setTextFormat(myformat);
10 var MTB:MarqueeText = MarqueeText.changeTextFieldToMarqueeText(stageTF, 200);
11 //
12 stage.addEventListener(MouseEvent.CLICK, onclick);
13 var flag:Boolean = false;
14 function onclick(evt:MouseEvent):void
15 {
16 flag = !flag;
17 if(flag)
18 {
19 MTA.text = "我是动态添加的";
20 MTB.text = "我是由舞台上的TextField直接转换来的";
21 MTA.width = MTB.width = 250;
22 MTA.delay = MTB.delay = 500;
23 MTA.step = MTB.step = 20;
24 }
25 else
26 {
27 MTA.text = "欢迎访问小鱼as3学习笔记 http://www.manyu.cn/blog";
28 MTB.text = "欢迎访问小鱼as3学习笔记 http://www.manyu.cn/blog";
29 MTA.width = MTB.width = 100;
30 MTA.delay = MTB.delay = 1000;
31 MTA.step = MTB.step = 10;
32 }
33 }

 

posted @ 2010-07-23 09:19  零纪录  阅读(1212)  评论(0编辑  收藏  举报