1
8
9 import com.sekati.effects.AnimHandler;
10 import com.sekati.utils.StringUtils;
11 import com.sekati.utils.TextUtils;
12
15 class com.sekati.effects.TextEffects {
16
24 public static function counter(tf:TextField, n:Number, steps:Number, cb:Function):Void {
25 tf.text = "";
26 var str:String = n.toString( );
27 var count:Number = 0;
28 var anim:MovieClip = AnimHandler.create( tf );
29 anim.onEnterFrame = function():Void {
30 if (count >= n) {
31 AnimHandler.destroy( tf );
32 tf.text = str;
33 } else {
34 count += steps;
35 var tmp:String = "";
36 for (var i:Number = 0; i < (str.length - count.toString( ).length) ; i++) tmp += "0";
37 tf.text = tmp + count.toString( );
38 }
39 };
40 }
41
48 public static function atype(tf:TextField, str:String, cb:Function):Void {
49 tf.html = true;
50 tf._alpha = 0;
51 var anim:MovieClip = AnimHandler.create( tf );
52 anim.cursor = 0;
53 anim.dLen = StringUtils.stripTags( str ).length;
54 anim.onEnterFrame = function():Void {
55 if (anim.dLen > 30) {
56 anim.cursor += 16 + random( 16 );
57 } else if (anim.dLen > 20) {
58 anim.cursor += 3 + random( 4 );
59 } else {
60 anim.cursor += 1;
61 }
62 tf.htmlText = str.substr( 0, anim.cursor );
63 anim.dLen = StringUtils.stripTags( str ).length - tf.text.length;
64 tf._alpha = int( tf.text.length * 100 / str.length );
65
66 if (anim.dLen <= 1) {
67 anim.destroy( );
68 tf.htmlText = str;
69 tf._alpha = 100;
70 cb( );
71 }
72 };
73 }
74
80 public static function uatype(tf:TextField, cb:Function):Void {
81 var sLen:Number = tf.htmlText.length;
82 trace( "uatype " + sLen );
83
84 var anim:MovieClip = AnimHandler.create( tf );
85 anim.cursor = tf.htmlText.length;
86 anim.onEnterFrame = function():Void {
87 if (anim.cursor == 0) {
88
89 anim.destroy( );
90 tf._alpha = 100;
91 if (cb) {
92 cb( );
93 }
94 } else {
95
96 anim.cursor -= (40 + random( 25 ));
97 tf._alpha = int( tf.htmlText.length * 100 / sLen );
98 if (anim.cursor < 0) {
99 anim.cursor = 0;
100 tf._alpha = 0;
101 }
102 tf.htmlText = tf.htmlText.substr( 0, anim.cursor );
103 }
104 };
105 }
106
115 public static function pushtype(tf:TextField, str:String, ms:Number, htm:Boolean, cb:Function):Void {
116 if (htm == true) {
117 var hstr:String = str;
118 str = StringUtils.stripTags( str );
119 tf.html = true;
120 }
121 if (tf.pushing != true) {
122 tf.pushing = true;
123 var from:Number = str.length;
124 tf.wordWrap = true;
125 var cp:Number = (str.length > 250) ? 26 : Math.floor( str.length / 4 );
126 if (cp < 1) {
127 cp = 1;
128 }
129 var myInterval:Number = setInterval( function():Void {
130 if (from > 0) {
131 from -= cp;
132 var to:Number = str.length;
133 tf.text = str.substring( from, to );
134 }
135 if (tf.text.length == str.length) {
136 clearInterval( myInterval );
137 if (htm == true) {
138 tf.htmlText = hstr;
139 }
140 tf.pushing = undefined;
141 cb( );
142 }
143 updateAfterEvent( );
144 }, ms );
145 }
146 }
147
159 public static function itype(tf:TextField, str:String, cursor:String, isFocus:Boolean, alphaStep:Number, pi:Number, ms:Number, cb:Function):Void {
160 var anim:String = "$__xtype__", fc:Number = 0, index:Number = 0, dLen:Number = str.length + 1;
161 if (tf[anim]) {
162 clearInterval( tf[anim] );
163 }
164 delete tf[anim];
165 tf.autoSize = true,
166 tf._alpha = 0,
167 tf.text = "",
168 tf.type = "dynamic";
169 tf[anim] = setInterval( function ():Void {
170 if (fc >= pi) {
171 if (tf._alpha < 100) {
172 tf._alpha += alphaStep;
173 }
174 if (dLen > 26) {
175 index += 4 + random( 3 );
176 } else if (dLen > 10) {
177 index += 2 + random( 2 );
178 } else {
179 index += 1;
180 }
181 tf.text = str.substr( 0, index ) + cursor;
182 dLen = (str.length + 1) - tf.length;
183 if (dLen < 2) {
184 clearInterval( tf[anim] );
185 delete tf[anim];
186 if (isFocus) {
187 tf.type = "input";
188 TextUtils.caret( tf, str.length );
189 }
190 tf.text = str;
191 tf._alpha = 100;
192 cb( );
193 }
194 } else {
195 fc++;
196 }
197 updateAfterEvent( );
198 }, ms );
199 }
200
209 public static function otype(tf:TextField, cursor:String, isFocus:Boolean, ms:Number, cb:Function):Void {
210 var str:String = tf.text, anim:String = "$__xtype__", undex:Number = 0, toc:Number = str.length + 1;
211 tf.autoSize = true,
212 tf.type = "dynamic";
213 if (tf[anim]) {
214 clearInterval( tf[anim] );
215 }
216 delete tf[anim];
217 tf[anim] = setInterval( function ():Void {
218 if (toc > str.length) {
219 if (toc > 26) {
220 undex -= 4 + random( 3 );
221 } else if (toc > 10) {
222 undex -= 2 + random( 2 );
223 } else {
224 undex -= 1;
225 }
226
227 tf.text = str.substr( 0, undex ) + cursor;
228 toc = (str.length - 1) + tf.length;
229 } else {
230 clearInterval( tf[anim] );
231 delete tf[anim];
232 tf.text = "";
233 if (isFocus) {
234 tf.type = "input";
235 TextUtils.caret( tf, 0 );
236 }
237 cb( );
238 }
239 updateAfterEvent( );
240 }, ms );
241 }
242
254 public static function iotype(tf:TextField, str:String, cursor:String, isFocus:Boolean, alphaStep:Number, pauseIndex:Number, ms:Number, cb:Function):Void {
255 var anim:String = "$__iotype__", fc:Number = 0, index:Number = 0, undex:Number = 0, dLen:Number = str.length + 1, toc:Number = str.length + 1;
256 if (tf[anim]) {
257 clearInterval( tf[anim] );
258 }
259 delete tf[anim];
260 tf.autoSize = true,
261 tf._alpha = 0,
262 tf.text = "",
263 tf.type = "dynamic";
264 tf[anim] = setInterval( function ():Void {
265 if (tf._alpha < 100) {
266 tf._alpha += alphaStep;
267 }
268 if (dLen > 26) {
269 index += 4 + random( 3 );
270 } else if (dLen > 10) {
271 index += 2 + random( 2 );
272 } else {
273 index += 1;
274 }
275 tf.text = str.substr( 0, index ) + cursor;
276 dLen = (str.length + 1) - tf.length;
277 if (dLen < 2) {
278
279 tf.text = str;
280 tf._alpha = 100;
281 if (fc >= pauseIndex) {
282
283
284 if (toc > str.length) {
285
286
287 if (toc > 26) {
288 undex -= 1;
289 } else if (toc > 10) {
290 undex -= 2 + random( 2 );
291 } else {
292 undex -= 4 + random( 3 );
293 }
294 tf.text = str.substr( 0, undex ) + cursor;
295 toc = (str.length - 1) + tf.length;
296
297 } else {
298
299 clearInterval( tf[anim] );
300 delete tf[anim];
301 tf.text = "";
302 if (isFocus) {
303 tf.type = "input";
304 TextUtils.caret( tf, str.length );
305 }
306 cb( );
307 }
308
309 } else {
310 fc++;
311 }
312 }
313 updateAfterEvent( );
314 }, ms );
315 }
316 private function TextEffects() {
317 }
318 }