可以使用TextArea.verticalScrollPosition = TextArea.maxVerticalScrollPosition;定位到最下方,但实际实现时,总是不能滚动动最后,而是倒数第二个。
ActionScript3天地会有人遇到了和我一样的问题: 如何让垂直滚动条定位到最下面的位置
后来在群里问了一下,原因是数据源虽然更新了,但是组件还没有刷新,解决方法有两种:
一:validateNow(),在设verticalScrollPosition之前先调用一下这个函数,强制刷新组件。(有高手指点说,此方法虽然是某个组件调用,却会使整个UI全部刷新,致使CPU占用过大,不推荐。其实UIComponent的validateNow()其实它内部也使用timer和enterframe进行的,所以推荐下面的方法)
二:加一个时间延时,具体加多长时间延时就不好说了,不能让用户感觉到延时,而且保证组件已经刷新了,所以需要多次测试哦!
即然说到了加延时,那如何加延时呢,我总结了一下,目前我知道的有如下几个方法:
一:Timer
1
var timer : Timer
=
new
Timer(
100
,
1
);
2 timer.addEventListener( TimerEvent.TIMER_COMPLETE, func );
3 timer.start();
这个方法是从
http://www.k-zone.cn/的某一篇文章里提取出来的,不知道正不正规。
2 timer.addEventListener( TimerEvent.TIMER_COMPLETE, func );
3 timer.start();
还有就是要注意垃圾回收,即在func里timer.stop();
二:setTimeout
我觉得这个方法其实是调用了一个工具方法。
flash.utils.setTimeout(function():
void
{Alert.show(
"
only show once
"
);},
2000
,
null
);
注意里面第一个参数必须是函数!个人认为这个比较好,多精简!
三:setInterval,可以重复
1<?xml version="1.0" encoding="utf-8"?>
2<mx:Application initialize="initTimter()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3<mx:Script>
4 <![CDATA[
5 import mx.controls.Alert;
6 public var count:Number=2; //定义时间长度(秒)
7 public var intervalId:Number;//定时器参数
8 //定时器起动口
9 public function initTimter():void{
10 intervalId = setInterval(doTimter,1000);
11 }
12 //定时器回调方法
13 public function doTimter():void{
14 showLabel.text = count.toString() + "second to go";
15 count -= 1;
16 if(count == 0){
17 showLabel.text = count.toString() + "second to go";
18 count=2;//重新开始定时
19 //clearInterval(intervalId);//移除定时 ,为了演示循环,屏蔽之
20 Alert.show("Time is up");
21 }
22 }
23]]>
24</mx:Script>
25<mx:Label id="showLabel"/>
26</mx:Application>
Code
1<?xml version="1.0" encoding="utf-8"?>
2<mx:Application initialize="initTimter()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3<mx:Script>
4 <![CDATA[
5 import mx.controls.Alert;
6 public var count:Number=2; //定义时间长度(秒)
7 public var intervalId:Number;//定时器参数
8 //定时器起动口
9 public function initTimter():void{
10 intervalId = setInterval(doTimter,1000);
11 }
12 //定时器回调方法
13 public function doTimter():void{
14 showLabel.text = count.toString() + "second to go";
15 count -= 1;
16 if(count == 0){
17 showLabel.text = count.toString() + "second to go";
18 count=2;//重新开始定时
19 //clearInterval(intervalId);//移除定时 ,为了演示循环,屏蔽之
20 Alert.show("Time is up");
21 }
22 }
23]]>
24</mx:Script>
25<mx:Label id="showLabel"/>
26</mx:Application>
以上代码来自
http://elprup.javaeye.com/blog/409442我做了一个小小的修改,以便能体现出它的重复特点。
1<?xml version="1.0" encoding="utf-8"?>
2<mx:Application initialize="initTimter()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3<mx:Script>
4 <![CDATA[
5 import mx.controls.Alert;
6 public var count:Number=2; //定义时间长度(秒)
7 public var intervalId:Number;//定时器参数
8 //定时器起动口
9 public function initTimter():void{
10 intervalId = setInterval(doTimter,1000);
11 }
12 //定时器回调方法
13 public function doTimter():void{
14 showLabel.text = count.toString() + "second to go";
15 count -= 1;
16 if(count == 0){
17 showLabel.text = count.toString() + "second to go";
18 count=2;//重新开始定时
19 //clearInterval(intervalId);//移除定时 ,为了演示循环,屏蔽之
20 Alert.show("Time is up");
21 }
22 }
23]]>
24</mx:Script>
25<mx:Label id="showLabel"/>
26</mx:Application>