現在需要的一個這樣的方式,用滑鼠對C進行Drag操作。使它可以在A中任意移動,但是由於C是包含在B中,因此使用startDrag() 和 stopDrag()的時候,只能在B地區中進行移動,而無法超出B的邊界。
如果我們想讓C在A中移動的話,那麼就應該使用一個叫做clipContent的屬性了。
以下是這個屬性的定義:
Whether to apply a clip mask if the positions and/or sizes of this container's children extend outside the borders of this container.
它的中文含義大致是:
如果此容器的子項的位置和/或大小擴充到此容器的邊框之外,是否應用剪裁遮罩。
clipContent值:
True:當子項目的邊界超出此容器時,不顯示子項目在此容器中。
Flase:當子項目的邊界超出此容器時,顯示子項目在此容器中。
clipContent是Container中的一個public propertie。因此Flex常用的一些容器類控制項:
Accordion, Box, Canvas, Form, FormItem, LayoutContainer, Panel, Tile, ViewStack 全部都可以使用這個屬性。
即我們在B中,設定clipContent = false,這樣就可以實現我們的要的效果了,當C在移動的時候,如果遇到了D,則會在D的下面,那麼這是怎麼回事呢?
因為在coding這個結構的時候,D的z-index就比B的高,因此C移動的時候,會被D遮擋住(雖然C可以在A中任意位置進行移動)
所以我們做如下的設定:
將B的z-index,放置到D的z-index上面即可。而我們使用的方式就是:setChildIndex(這個method是很常用的,因此我就不在這裡進行複述了。)
因此如果在一個很複雜的嵌套的容器中,如果要移動其中一個子容器在最外層容器中時,應作如下的設定:
1、將要移動的子容器的父容器(當然這個父容器之上可能還會有父容器的)要在需要移動容器中處於最上層顯示。
例如:A → B → C → D → E
F→ G → H
如果想要移動E在A中,那麼就需要B在F的上面,即使用setChildIndex來重新設定B與F的位置。
2、需要將D容器的clipContent設定為false。
以上,希望會對大家有所協助:)