注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

金融IT小鸿的博客

致力于金融IT行业

 
 
 

日志

 
 
关于我

Organize the world's information I care about and share it with other people! Change the Financial Industry through Information Technology! 爱互联网,爱金融, 爱分享,爱运动, 也爱偶尔胡思乱想! 我是金融IT小鸿

网易考拉推荐

Flex中滚动条无法自动定位到组件底部的问题  

2010-09-13 17:34:06|  分类: AS & Flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在做聊天室群聊窗口文字消息添加的时候,发现一个奇怪的问题,滚动条总是不能到达底部。上网搜了搜,终于发现了问题的所在。

当为一个容器添加一个child的时候,很容易想到的做法是:

vbox.verticalScrollPosition = vbox.maxVerticalScrollPositon

但是,这是不完全正确的。这种做法是在childAdd事件触发的时候来设置verticalScrollPosition,但是使用这种方法,得到的效果总是滚动条离最下方有一段距离。其实,当childAdd事件触发的时候,像vbox这些container并没有开始重新改变自己的尺寸。此时返回的maxVerticalScrollPosition不是最新的,而是上一次的。这时候需要使用callLater方法,就可以得到准确的maxVerticalScrollPosition

下面是一个例子:

 <?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>

        <![CDATA[

            

            import mx.controls.Button;

            import mx.events.ChildExistenceChangedEvent;

            

            private function addAButton(): void

            {

               var newButton:Button = new Button();

               newButton.label = "new button" ;

               vbox2.addChild(newButton);

            }

            

            private function onAdd(event:Event):void{

             callLater(focusNewRow);

            }

            

            private function childAddHandler(event:ChildExistenceChangedEvent): void

            {

               callLater(focusNewRow);

            }

            

            public function focusNewRow():void {

               vbox2.verticalScrollPosition = vbox2.maxVerticalScrollPosition;

                        };

                

        ]]>

    </mx:Script>

    

    <mx:Text width="400" fontWeight="bold" text="Scroll in A Container Use Case: Click on the Button to continue adding children to the container and watch the scrollbar. It will always scroll to the bottom of the container." />

    <mx:VBox id="vbox2" borderThickness="2" borderStyle="solid" height="120" width="240" 

        childAdd="childAddHandler(event)" added="onAdd(event)">

       <mx:Button label="hello"/>

    </mx:VBox>

    

    <mx:Button label="click me to add a button" click="addAButton()" />

    


    </mx:Application>


除了在一个container里自动滚动,还有一个问题就是如何在一个TextArea里随着文字的动态变化,将滚动条自动定位到TextArea的底部。很容易想到的就是在TextArea的“change”事件中设置verticalScrollPosition。但是,这样依旧行不通,你需要使用valueCommit事件。当TextArea得尺寸发生变化时,这个事件比change事件触发的要晚。示例代码如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    

    <mx:Text width="400" fontWeight="bold" text="Scroll in TextArea Use Case: Type in the second TextArea and notice that the scrollbar of the TextArea is always scrolled to the bottom." />

    

    <mx:TextArea id="ta2" text="Hello." />

    

    <mx:TextArea id="ta1" text="{ta2.text}" valueCommit="ta1.verticalScrollPosition=ta1.maxVerticalScrollPosition" />

        

 </mx:Application>



感谢这篇博文,帮助我解决这个问题!

  评论这张
 
阅读(2191)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017