首页 > 网站 > WEB开发 > 正文

3.29.控制子组件的位置和滚动

2024-04-27 13:51:52
字体:
来源:转载
供稿:网友
3.29.1 问题
你需要滚动一个父组件并且移动除了一个子组件之外的其它所有子组件。
3.29.2 解决办法
在容器定义的scrollChildren方法内,根据verticalScrollPosition属性重新定位子组件。
3.29.3 讨论
容器的scrollChildren 方法测量容器的contentPane 这个DisplayObject,它包含了添加到容器中的所有子组件,同时确定在滚动的时候测量到的子组件要显示出多少。contentPane则根据horizontalScrollPosition 和verticalScrollPosition 属性移动。容器自身则像是contentPane 的遮罩一样,并且contentPane 的位置由滚动条的相对位置以及容器的ViewMetrics 属性值确定。

下面的代码段把顶部组件的y 位置存储起来,允许用户拖拽组件的同时保持组建距离父亲容器顶部位置的不变,而正常设置其它组件:
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="500"
height="500">

<mx:Script>
<![CDATA[
private var top:TopComponent;
//store the y position
private var topY:Number;
private function showTop():void
{
top = new TopComponent();
addChild(top);
top.verticalScrollPolicy = "none";
top.x = 200;
top.y = 100;
topY = top.y;
top.addEventListener(MouseEvent.MOUSE_DOWN, dragTop);
}
private function dragTop(event:Event):void
{
top.startDrag(falsethis.getBounds(stage));
top.addEventListener(MouseEvent.MOUSE_UP,
stopDragTop);
}p
private function stopDragTop(event:Event):void
{
topY = top.y;
top.stopDrag();
top.removeEventListener(MouseEvent.MOUSE_UP,
stopDragTop);
}o
override protected function scrollChildren():void
{
super.scrollChildren();
if(top){
top.y = verticalScrollPosition+topY;
//
top.verticalScrollPosition =
this.verticalScrollPosition/height *
top.height;
}
}

]]>
</mx:Script>
<mx:Panel>
<mx:Label text="LABEL BABEL"/>
<mx:Label text="LABEL BABEL"/>
<mx:Label text="LABEL BABEL"/>
</mx:Panel>
<mx:Panel y="500height="200">
<mx:Label text="LABEL BABEL"/>
<mx:Label text="LABEL BABEL"/>
<mx:Label text="LABEL BABEL"/>
</mx:Panel>
<mx:Button click="showTop()"/>
</mx:Canvas>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表