12.5.创建自定义Effect触发器

12.5.1 问题
我想为组件创建自定义的效果触发器。
12.5.2 解决办法
在组件里使用Effect 元数据标签定义触发器的名称和绑定到触发器的事件。
12.5.3 讨论
一个触发器定义了一个播放效果的事件,触发器通常在Flex 框架中使用—例如,要定义一个ComboBox 组件的mouseDownEffect 事件。
+展开
-XML
<mx:ComboBox mouseDownEffect="{glowEffect}"/>

当在ComboBox 内广播mouseDown 事件的时候,绑定到该ComboBox 实例的mouseDownEffect 属性的效果即被播放。这里,即播放名为glowEffect 的效果。要定义一个自定义的触发器名字,定义一个具有名称和事件类型的Event,并且定义一个具有触发器名称和绑定到该触发器的事件名称的Effect。
+展开
-ActionScript
[Event(name="darken", type="flash.events.Event")]
[Effect(name="darkenEffect", event="darken")]

在前面的代码中,定义一个名为darkenEffect 的触发器,可以给这个触发器绑定一个Effect。

绑定到这个触发器的Effect 将会在此组件广播一个名为darken 的Event 的时候开始播放。下面是完整的代码:
+展开
-XML
<mx:HBoxxmlns:mx="http://www.adobe.com/2006/mxmlwidth="400height="300">
<mx:Metadata>
[Event(name="darken", type="flash.events.Event")]
[Effect(name="darkenEffect", event="darken")]
[Event(name="lighten", type="flash.events.Event")]
[Effect(name="lightenEffect", event="lighten")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import flash.events.Event;
private function dispatchDarken():void {
//this will cause whatever Effect is bound
//to the darkenEffect trigger to play
dispatchEvent(new Event("darken"));
}
private function dispatchLighten():void {
//this will cause whatever Effect is bound
//to the lightenEffect trigger to play
dispatchEvent(new Event("lighten"));
}

]]>
</mx:Script>
<mx:Button click="dispatchDarken()label="darken"/>
<mx:Button click="dispatchLighten()label="lighten"/>
</mx:HBox>

上面的代码保存为CustomTriggerExample 文件并用<cookbook:CustomTriggerExample>标签实现下面的例子。要实现这个组件并使用两个新触发器,即两个Glow 效果绑定到两个触发器上:
+展开
-XML
<mx:HBoxxmlns:mx="http://www.adobe.com/2006/mxmlwidth="400"
height="900xmlns:cookbook="oreilly.cookbook.*">

<mx:Glow color="#000000duration="3000id="darkenFilter"/>
<mx:Glow color="#ffffffduration="3000id="lightenFilter"/>
<cookbook:CustomTriggerExample darkenEffect="{darkenFilter}"
lightenEffect="{lightenFilter}"/>

</mx:HBox>

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


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