自定义类 BroadCastMarquee.as
1
package
utils
2 {
3 import flash.events.MouseEvent;
4 import flash.events.TimerEvent;
5 import flash.geom.Rectangle;
6 import flash.text.TextField;
7 import flash.text.TextFieldAutoSize;
8 import flash.text.TextFormat;
9 import flash.utils.Timer;
10
11 import mx.core.UIComponent;
12
13 public class BroadCastMarquee extends UIComponent
14 {
15
16 [Bindable]
17 private var broadcastText:String = " broadcast message " ;
18
19 private var m_timer:Timer
20
21 private var m_DefaultText_X:Number = 0 ;
22
23 // 每次移动距离
24 private var m_step:Number = 10 ;
25
26 // 滚动范围
27 private var m_rect:Rectangle;
28
29 // 移动时间间隔
30 private var t_delay:Number = 100 ;
31
32 // 广播信息滚动宽度
33 private var m_Width:Number;
34
35 // 滚动方向属性
36 [Inspectable(defaultValue = " left " ,enumeration = " right,left " , category = " direction " , type = " String " )]
37 public var ScrollDirection:String = " left " ;
38
39 // 显示内容样式
40 [Bindable]
41 private var m_TextFormat:TextFormat = new TextFormat( " Verdana " , " 10 " , " #0b333c " );
42
43 /** 广播信息内容显示控件 */
44 private var m_BroadCastText:TextField;
45
46 // private var m_BroadcastLabel:Label;
47
48 public function BroadCastMarquee()
49 {
50 super ();
51
52 InitBroadcast();
53
54 addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler);
55 addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
56 }
57
58 /** 初始化 */
59 private function InitBroadcast(): void
60 {
61 /** 广播信息显示控件初始化 */
62 m_BroadCastText = new TextField();
63 m_BroadCastText.autoSize = TextFieldAutoSize.LEFT;
64 m_BroadCastText.multiline = false ;
65 m_BroadCastText.selectable = false ;
66 m_BroadCastText.x = m_BroadCastText.y = m_DefaultText_X
67 m_BroadCastText.wordWrap = false ;
68 m_BroadCastText.text = broadcastText;
69 // m_BroadCastText.defaultTextFormat=m_TextFormat;
70 addChild(m_BroadCastText);
71
72
73 this .m_Width = this .width;
74 m_rect = new Rectangle( 0 , 0 , this .width, this .m_BroadCastText.textHeight);
75 this .m_BroadCastText.scrollRect = m_rect;
76
77 m_timer = new Timer(t_delay);
78
79 ScrollBroadText();
80 }
81
82 /**
83 * 如果有新的广播消息,或者长度改变进行滚动显示
84 * */
85 private function ScrollBroadText(): void
86 {
87 if ( this .m_timer != null )
88 {
89 // 停止移动
90 StopMoveBroadcast();
91
92 if ( this .broadcastText != "" )
93 {
94 m_timer.addEventListener(TimerEvent.TIMER, timerHandler);
95 m_timer.start();
96 }
97 }
98 }
99
100 /** 控制滚动信息 */
101 private function timerHandler(evt:TimerEvent): void
102 {
103 if ( this .m_BroadCastText.textWidth > 0 )
104 {
105
106 if (ScrollDirection.toLowerCase() == " left " )
107 {
108
109 if (m_rect.x <= this .m_BroadCastText.textWidth)
110 {
111 // this.m_BroadCastText.x+=(-this.m_step);
112 m_rect.x += this .m_step;
113
114 } else
115 {
116 // this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth;
117 m_rect.x =- (m_DefaultText_X + this .m_Width);
118 }
119 }
120 else
121 {
122
123 if (Math.abs(m_rect.x) <= this .m_BroadCastText.textWidth)
124 {
125 m_rect.x -= this .m_step;
126 }
127 else
128 {
129 this .m_rect.x = m_DefaultText_X;
130 }
131 }
132 m_BroadCastText.scrollRect = m_rect;
133
134 } else
135 {
136 // 停止移动
137 StopMoveBroadcast();
138 }
139 }
140
141 /** 停止移动 */
142 private function StopMoveBroadcast(): void
143 {
144 if (m_timer != null )
145 {
146 this .m_timer.stop();
147 if (m_timer.hasEventListener(TimerEvent.TIMER))
148 m_timer.removeEventListener(TimerEvent.TIMER, timerHandler);
149
150 m_BroadCastText.x = this .m_DefaultText_X;
151 m_rect.height = m_BroadCastText.height;
152 // this.height=m_rect.height;
153 m_BroadCastText.scrollRect = m_rect;
154 }
155 }
156
157
158 /** ************************广播信息处理事件******************************** */
159
160 /** 鼠标经过处理事件 */
161 protected function rollOverHandler(event:MouseEvent): void
162 {
163 if ( this .m_timer != null && this .broadcastText != "" )
164 {
165 this .m_timer.stop();
166 }
167 }
168
169 /** 鼠标离开处理事件 */
170 protected function rollOutHandler(event:MouseEvent): void
171 {
172 if ( this .m_timer != null && this .broadcastText != "" )
173 {
174 this .m_timer.start();
175 }
176 }
177
178 /** ************************广播信息属性************************************ */
179
180 /** 移动时间间隔 */
181 public function set BroadCastDeplay(value:Number): void
182 {
183 this .m_timer.delay = value;
184 }
185
186 /** 设置广播信息内容 */
187 public function set BroadCastText(value:String): void
188 {
189 this .m_BroadCastText.text = value;
190 ScrollBroadText();
191 }
192
193 /** 取得广播信息内容 */
194 public function get BroadCastText():String
195 {
196 return this .broadcastText;
197 }
198
199
200 /** 广播信息宽度宽度 */
201 public override function get width():Number
202 {
203 return this .m_Width;
204 }
205
206 public override function set width(width:Number): void
207 {
208 this .m_Width = width;
209 this .m_rect.width = this .m_Width;
210 this .m_BroadCastText.scrollRect = this .m_rect;
211 ScrollBroadText();
212 // this.m_BroadCastText.setTextFormat
213 }
214
215
216 /** 设置滚动方向('left' or 'right') */
217 public function set Direction(value:String): void
218 {
219 this .ScrollDirection = value;
220 ScrollBroadText();
221 }
222
223
224 /** 设置字体格式化样式 */
225 public function set defaultTextFormat(format:TextFormat): void
226 {
227 this .m_BroadCastText.defaultTextFormat = format;
228 this .setTextFormat(format);
229 }
230
231 public function setTextFormat(format:TextFormat, beginIndex: int = - 1 , endIndex: int = - 1 ): void
232 {
233 m_BroadCastText.setTextFormat(format, beginIndex, endIndex);
234 ScrollBroadText();
235 }
236
237
238 /** 字体大小 */
239 public function set fontSize(value:Object): void
240 {
241 this .m_TextFormat = new TextFormat( this .m_TextFormat.font,value, this .m_TextFormat.color);
242 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
243
244 }
245
246 /** 字体名称 */
247 public function set fontFamily(value:String): void
248 {
249 this .m_TextFormat = new TextFormat(value, this .m_TextFormat.size, this .m_TextFormat.color);
250 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
251 }
252
253 /** 字体颜色 */
254 public function set color(value:Object): void
255 {
256 this .m_TextFormat = new TextFormat( this .m_TextFormat.font, this .m_TextFormat.size,value);
257 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
258 }
259
260 /** 是否是粗体 */
261 public function set fontWeight(value:Object): void
262 {
263 this .m_TextFormat = new TextFormat( this .m_TextFormat.font, this .m_TextFormat.size, this .m_TextFormat.color,value)
264 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
265 }
266 }
267 }
268
2 {
3 import flash.events.MouseEvent;
4 import flash.events.TimerEvent;
5 import flash.geom.Rectangle;
6 import flash.text.TextField;
7 import flash.text.TextFieldAutoSize;
8 import flash.text.TextFormat;
9 import flash.utils.Timer;
10
11 import mx.core.UIComponent;
12
13 public class BroadCastMarquee extends UIComponent
14 {
15
16 [Bindable]
17 private var broadcastText:String = " broadcast message " ;
18
19 private var m_timer:Timer
20
21 private var m_DefaultText_X:Number = 0 ;
22
23 // 每次移动距离
24 private var m_step:Number = 10 ;
25
26 // 滚动范围
27 private var m_rect:Rectangle;
28
29 // 移动时间间隔
30 private var t_delay:Number = 100 ;
31
32 // 广播信息滚动宽度
33 private var m_Width:Number;
34
35 // 滚动方向属性
36 [Inspectable(defaultValue = " left " ,enumeration = " right,left " , category = " direction " , type = " String " )]
37 public var ScrollDirection:String = " left " ;
38
39 // 显示内容样式
40 [Bindable]
41 private var m_TextFormat:TextFormat = new TextFormat( " Verdana " , " 10 " , " #0b333c " );
42
43 /** 广播信息内容显示控件 */
44 private var m_BroadCastText:TextField;
45
46 // private var m_BroadcastLabel:Label;
47
48 public function BroadCastMarquee()
49 {
50 super ();
51
52 InitBroadcast();
53
54 addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler);
55 addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
56 }
57
58 /** 初始化 */
59 private function InitBroadcast(): void
60 {
61 /** 广播信息显示控件初始化 */
62 m_BroadCastText = new TextField();
63 m_BroadCastText.autoSize = TextFieldAutoSize.LEFT;
64 m_BroadCastText.multiline = false ;
65 m_BroadCastText.selectable = false ;
66 m_BroadCastText.x = m_BroadCastText.y = m_DefaultText_X
67 m_BroadCastText.wordWrap = false ;
68 m_BroadCastText.text = broadcastText;
69 // m_BroadCastText.defaultTextFormat=m_TextFormat;
70 addChild(m_BroadCastText);
71
72
73 this .m_Width = this .width;
74 m_rect = new Rectangle( 0 , 0 , this .width, this .m_BroadCastText.textHeight);
75 this .m_BroadCastText.scrollRect = m_rect;
76
77 m_timer = new Timer(t_delay);
78
79 ScrollBroadText();
80 }
81
82 /**
83 * 如果有新的广播消息,或者长度改变进行滚动显示
84 * */
85 private function ScrollBroadText(): void
86 {
87 if ( this .m_timer != null )
88 {
89 // 停止移动
90 StopMoveBroadcast();
91
92 if ( this .broadcastText != "" )
93 {
94 m_timer.addEventListener(TimerEvent.TIMER, timerHandler);
95 m_timer.start();
96 }
97 }
98 }
99
100 /** 控制滚动信息 */
101 private function timerHandler(evt:TimerEvent): void
102 {
103 if ( this .m_BroadCastText.textWidth > 0 )
104 {
105
106 if (ScrollDirection.toLowerCase() == " left " )
107 {
108
109 if (m_rect.x <= this .m_BroadCastText.textWidth)
110 {
111 // this.m_BroadCastText.x+=(-this.m_step);
112 m_rect.x += this .m_step;
113
114 } else
115 {
116 // this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth;
117 m_rect.x =- (m_DefaultText_X + this .m_Width);
118 }
119 }
120 else
121 {
122
123 if (Math.abs(m_rect.x) <= this .m_BroadCastText.textWidth)
124 {
125 m_rect.x -= this .m_step;
126 }
127 else
128 {
129 this .m_rect.x = m_DefaultText_X;
130 }
131 }
132 m_BroadCastText.scrollRect = m_rect;
133
134 } else
135 {
136 // 停止移动
137 StopMoveBroadcast();
138 }
139 }
140
141 /** 停止移动 */
142 private function StopMoveBroadcast(): void
143 {
144 if (m_timer != null )
145 {
146 this .m_timer.stop();
147 if (m_timer.hasEventListener(TimerEvent.TIMER))
148 m_timer.removeEventListener(TimerEvent.TIMER, timerHandler);
149
150 m_BroadCastText.x = this .m_DefaultText_X;
151 m_rect.height = m_BroadCastText.height;
152 // this.height=m_rect.height;
153 m_BroadCastText.scrollRect = m_rect;
154 }
155 }
156
157
158 /** ************************广播信息处理事件******************************** */
159
160 /** 鼠标经过处理事件 */
161 protected function rollOverHandler(event:MouseEvent): void
162 {
163 if ( this .m_timer != null && this .broadcastText != "" )
164 {
165 this .m_timer.stop();
166 }
167 }
168
169 /** 鼠标离开处理事件 */
170 protected function rollOutHandler(event:MouseEvent): void
171 {
172 if ( this .m_timer != null && this .broadcastText != "" )
173 {
174 this .m_timer.start();
175 }
176 }
177
178 /** ************************广播信息属性************************************ */
179
180 /** 移动时间间隔 */
181 public function set BroadCastDeplay(value:Number): void
182 {
183 this .m_timer.delay = value;
184 }
185
186 /** 设置广播信息内容 */
187 public function set BroadCastText(value:String): void
188 {
189 this .m_BroadCastText.text = value;
190 ScrollBroadText();
191 }
192
193 /** 取得广播信息内容 */
194 public function get BroadCastText():String
195 {
196 return this .broadcastText;
197 }
198
199
200 /** 广播信息宽度宽度 */
201 public override function get width():Number
202 {
203 return this .m_Width;
204 }
205
206 public override function set width(width:Number): void
207 {
208 this .m_Width = width;
209 this .m_rect.width = this .m_Width;
210 this .m_BroadCastText.scrollRect = this .m_rect;
211 ScrollBroadText();
212 // this.m_BroadCastText.setTextFormat
213 }
214
215
216 /** 设置滚动方向('left' or 'right') */
217 public function set Direction(value:String): void
218 {
219 this .ScrollDirection = value;
220 ScrollBroadText();
221 }
222
223
224 /** 设置字体格式化样式 */
225 public function set defaultTextFormat(format:TextFormat): void
226 {
227 this .m_BroadCastText.defaultTextFormat = format;
228 this .setTextFormat(format);
229 }
230
231 public function setTextFormat(format:TextFormat, beginIndex: int = - 1 , endIndex: int = - 1 ): void
232 {
233 m_BroadCastText.setTextFormat(format, beginIndex, endIndex);
234 ScrollBroadText();
235 }
236
237
238 /** 字体大小 */
239 public function set fontSize(value:Object): void
240 {
241 this .m_TextFormat = new TextFormat( this .m_TextFormat.font,value, this .m_TextFormat.color);
242 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
243
244 }
245
246 /** 字体名称 */
247 public function set fontFamily(value:String): void
248 {
249 this .m_TextFormat = new TextFormat(value, this .m_TextFormat.size, this .m_TextFormat.color);
250 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
251 }
252
253 /** 字体颜色 */
254 public function set color(value:Object): void
255 {
256 this .m_TextFormat = new TextFormat( this .m_TextFormat.font, this .m_TextFormat.size,value);
257 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
258 }
259
260 /** 是否是粗体 */
261 public function set fontWeight(value:Object): void
262 {
263 this .m_TextFormat = new TextFormat( this .m_TextFormat.font, this .m_TextFormat.size, this .m_TextFormat.color,value)
264 this .m_BroadCastText.setTextFormat( this .m_TextFormat, - 1 , - 1 );
265 }
266 }
267 }
268
在mxml文件中:
1
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
2 < s:Application xmlns:fx = " http://ns.adobe.com/mxml/2009 "
3 xmlns:s = " library://ns.adobe.com/flex/spark "
4 xmlns:mx = " library://ns.adobe.com/flex/mx " minWidth = " 955 " minHeight = " 600 " xmlns:utils = " utils.* " >
5 < fx:Declarations >
6 <!-- Place non - visual elements (e.g., services, value objects) here -->
7 </ fx:Declarations >
8
9 < utils:BroadCastMarquee width = " 888 " height = " 25 " BroadCastDeplay = " 800 " BroadCastText = " 公告:火爆商品等你拿! " ScrollDirection = " left " >
10
11 </ utils:BroadCastMarquee >
12 </ s:Application >
13
2 < s:Application xmlns:fx = " http://ns.adobe.com/mxml/2009 "
3 xmlns:s = " library://ns.adobe.com/flex/spark "
4 xmlns:mx = " library://ns.adobe.com/flex/mx " minWidth = " 955 " minHeight = " 600 " xmlns:utils = " utils.* " >
5 < fx:Declarations >
6 <!-- Place non - visual elements (e.g., services, value objects) here -->
7 </ fx:Declarations >
8
9 < utils:BroadCastMarquee width = " 888 " height = " 25 " BroadCastDeplay = " 800 " BroadCastText = " 公告:火爆商品等你拿! " ScrollDirection = " left " >
10
11 </ utils:BroadCastMarquee >
12 </ s:Application >
13