11.4.为特定类型的子节点过滤Transitions
11.4.1. 问题
我想让transition 只影响到某些子组件
11.4.2. 解决办法
使用EffectTargetFilter 对象定义过滤函数来检测哪些目标将被应用Transition。
11.4.3. 讨论
EffectTargetFilter 对象可定义过滤器检测哪些目标被应用到transition。EffectTargetFilter 对象需要一个过滤函数,类似于一个数组,为每个传进Transition 的对象返回true 或false,传递过滤函数给EffectTargetFilter 的filterFunction 属性:
你还要添加额外的语句决定是否可以让Sequence 或Parallel 应用到对象上。注意不能只应用Transition 中个别的特效(详见第11.5节.)
像下面这样传递EffectTargetFilters 对象给Parallel 或Sequence:
当Sequence 被调用时,customFilter 对象返回过滤器中被允许的所有对象,这意味着如果必要的话在运行期可多次改变过滤函数产生不同的结果。完整的代码如下:
我想让transition 只影响到某些子组件
11.4.2. 解决办法
使用EffectTargetFilter 对象定义过滤函数来检测哪些目标将被应用Transition。
11.4.3. 讨论
EffectTargetFilter 对象可定义过滤器检测哪些目标被应用到transition。EffectTargetFilter 对象需要一个过滤函数,类似于一个数组,为每个传进Transition 的对象返回true 或false,传递过滤函数给EffectTargetFilter 的filterFunction 属性:
+展开
-ActionScript
filter.filterFunction = func;
private function func(propChanges:Array,
instanceTarget:Object):Boolean
{
if(instanceTarget is HBox)
{
return true;
}
return false;
}
private function func(propChanges:Array,
instanceTarget:Object):Boolean
{
if(instanceTarget is HBox)
{
return true;
}
return false;
}
你还要添加额外的语句决定是否可以让Sequence 或Parallel 应用到对象上。注意不能只应用Transition 中个别的特效(详见第11.5节.)
像下面这样传递EffectTargetFilters 对象给Parallel 或Sequence:
+展开
-XML
<mx:Sequence filter="resize" targets="{[one, two, three]}" customFilter="{filter}">
当Sequence 被调用时,customFilter 对象返回过滤器中被允许的所有对象,这意味着如果必要的话在运行期可多次改变过滤函数产生不同的结果。完整的代码如下:
+展开
-XML
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400"
height="300" creationComplete="comp()"
xmlns:cookbook="oreilly.cookbook.*">
<mx:Script>
<![CDATA[
import mx.containers.HBox;
import mx.effects.EffectTargetFilter;
[Bindable]
private var filter:EffectTargetFilter;
private function comp():void {
filter = new EffectTargetFilter();
filter.filterFunction = func;
}
private function func(propChanges:Array,
instanceTarget:Object):Boolean {
if(instanceTarget is HBox) {
return true;
}
return false;
}
]]>
</mx:Script>
<mx:transitions>
<mx:Transition toState="closeState" fromState="openState">
<mx:Sequence filter="resize" targets="{[one, two,
three]}" customFilter="{filter}">
<mx:Move xTo="200" xFrom="0"/>
<mx:Glow color="0xffff00" blurXTo="20"
blurYTo="20"/>
</mx:Sequence>
</mx:Transition>
</mx:transitions>
<mx:states>
<mx:State name="closeState"/>
<mx:State name="openState"/>
</mx:states>
<mx:HBox id="one">
<mx:Text text="one"/>
<mx:Text text="two"/>
</mx:HBox>
<mx:HBox id="two">
<mx:Text text="one"/>
<mx:Text text="two"/>
</mx:HBox>
<mx:Canvas id="three">
<mx:Text text="one"/>
<mx:Text text="two" y="10"/>
</mx:Canvas>
<mx:Button click="(currentState == 'openState') ? currentState='closeState' : currentState='openState'"/>
</mx:VBox>
height="300" creationComplete="comp()"
xmlns:cookbook="oreilly.cookbook.*">
<mx:Script>
<![CDATA[
import mx.containers.HBox;
import mx.effects.EffectTargetFilter;
[Bindable]
private var filter:EffectTargetFilter;
private function comp():void {
filter = new EffectTargetFilter();
filter.filterFunction = func;
}
private function func(propChanges:Array,
instanceTarget:Object):Boolean {
if(instanceTarget is HBox) {
return true;
}
return false;
}
]]>
</mx:Script>
<mx:transitions>
<mx:Transition toState="closeState" fromState="openState">
<mx:Sequence filter="resize" targets="{[one, two,
three]}" customFilter="{filter}">
<mx:Move xTo="200" xFrom="0"/>
<mx:Glow color="0xffff00" blurXTo="20"
blurYTo="20"/>
</mx:Sequence>
</mx:Transition>
</mx:transitions>
<mx:states>
<mx:State name="closeState"/>
<mx:State name="openState"/>
</mx:states>
<mx:HBox id="one">
<mx:Text text="one"/>
<mx:Text text="two"/>
</mx:HBox>
<mx:HBox id="two">
<mx:Text text="one"/>
<mx:Text text="two"/>
</mx:HBox>
<mx:Canvas id="three">
<mx:Text text="one"/>
<mx:Text text="two" y="10"/>
</mx:Canvas>
<mx:Button click="(currentState == 'openState') ? currentState='closeState' : currentState='openState'"/>
</mx:VBox>
加支付宝好友偷能量挖...