[Flex][问题笔记]TextArea滚动条问题
用flex做即时通讯,收到的最新消息应该在最下面,但textArea的滚动条默认在最上方,不方便查看最新消息。
可以使用TextArea.verticalScrollPosition = TextArea.maxVerticalScrollPosition;定位到最下方,但实际实现时,总是不能滚动动最后,而是倒数第二个。
ActionScript3天地会有人遇到了和我一样的问题:如何让垂直滚动条定位到最下面的位置
后来在群里问了一下,原因是数据源虽然更新了,但是组件还没有刷新,解决方法有两种:
一:validateNow(),在设verticalScrollPosition之前先调用一下这个函数,强制刷新组件。(有高手指点说,此方法虽然是某个组件调用,却会使整个UI全部刷新,致使CPU占用过大,不推荐。其实UIComponent的validateNow()其实它内部也使用timer和enterframe进行的,所以推荐下面的方法)
二:加一个时间延时,具体加多长时间延时就不好说了,不能让用户感觉到延时,而且保证组件已经刷新了,所以需要多次测试哦!
即然说到了加延时,那如何加延时呢,我总结了一下,目前我知道的有如下几个方法:
一:Timer
还有就是要注意垃圾回收,即在func里timer.stop();
二:setTimeout
我觉得这个方法其实是调用了一个工具方法。
三:setInterval,可以重复
可以使用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,可以重复
Code
以上代码来自http://elprup.javaeye.com/blog/409442我做了一个小小的修改,以便能体现出它的重复特点。