3.22.在容器中滚动到某个指定的子组件

3.22.1 问题
你需要在容器上控制默认的滚动行为,同时控制滚动通过单独的控件。
3.22.2 解决办法
根据需要滚动到的子组件的索引,使用getChildAt 方法获取滚动时经过的所有子组件,并计算滚动经过的这些子组件的高度之和。然后使用计算得到的值来设置容器的verticalScrollPosition 属性值。
3.22.3 讨论
在下面的例子中,包含子组件的Vbox 将verticalScrollPolicy 属性设置为off,并且将一个事件侦听绑定到ComboBox 的change 属性上。当触发change 事件的时候,函数循环遍历所有VBox 的子组件,知道找出需要的那个子组件,求和。然后把这个和设置到Vbox 的verticalScrollPolicy。
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="800"
height="600">

<mx:Script>
<![CDATA[
private function showScrollValue():void
{
trace(this.verticalScrollPosition+" "+
this.horizontalScrollPosition);
}
private function changeScrollToShowChild():void
{
vbox.verticalScrollPosition =
(returnChildrenHeights((comboBox.selectedItem as
Number)+1)) - vbox.height;
}

Vbox 内所有子组件的高度用以计算并确定一个y 值来设定verticalScrollPosition 属性,从而使Vbox 滚动到指定的子组件的位置。
+展开
-XML
<mx:Script>
private function
returnChildrenHeights(index:int):Number
{
var i:int = 0;
var sumHeight:Number = 0;
while(i<index) {
sumHeight+=vbox.getChildAt(i).height;
i++;
}r
return sumHeight;
}
]]>

</mx:Script>
<mx:ComboBox id="comboBoxchange="changeScrollToShowChild()">
<mx:dataProvider>
<mx:Array>
<mx:Number>1</mx:Number>
<mx:Number>2</mx:Number>
<mx:Number>3</mx:Number>
<mx:Number>4</mx:Number>
<mx:Number>5</mx:Number>
</mx:Array>
</mx:dataProvider>
</mx:ComboBox>
<mx:VBox width="650height="300id="vbox"
backgroundColor="#00ffffy="50verticalScrollPolicy="off"
scroll="showScrollValue()paddingLeft="50">

<mx:Panel height="150width="550">
<mx:LinkButton label="First"/>
</mx:Panel>
<mx:Panel height="160width="550">
<mx:LinkButton label="Second"/>
</mx:Panel>
<mx:Panel height="110width="550">
<mx:LinkButton label="Third"/>
</mx:Panel>
<mx:Panel height="150width="550">
<mx:LinkButton label="Fourth"/>
</mx:Panel>
<mx:Panel height="130width="550">
<mx:LinkButton label="Fifth"/>
</mx:Panel>
</mx:VBox>
</mx:Canvas>

加支付宝好友偷能量挖...


评论(0)网络
阅读(97)喜欢(0)flash/flex/fcs/AIR