首先介紹一下Flex里面的自帶的效果有以下幾種:
Blur 模糊效果
Move 移動效果
Fade 淡入淡出效果
Glow 發(fā)光效果
Resize 調(diào)整大小效果
Rotate 旋轉(zhuǎn)效果
Zoom 縮放效果
WipeLeft 用遮罩實現(xiàn)畫面收放效果,下同,分別為不同方向
WipeRight
WipeUp
WipeDown
不同的效果所需要設(shè)置的屬性也不一樣,比如Blur效果需要設(shè)置它的X與Y軸的模糊像素
<mx:Blur id="blur" blurXFrom="0" blurXTo="10" />
而Move效果需要設(shè)置移動的位置信息
<mx:Move id="moveEffect" xFrom="-100" />
其它設(shè)置可以參考Flex語言參考
下面說說如何使用這些效果。要運行這些效果有兩種方法:一種是調(diào)用該效果的play()方法,另外一種是使用觸發(fā)器來觸發(fā)效果。
(1)使用play()方法:
先看效果:
以下代碼:
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 private function onClick(event:Event):void {
6 be.target = event.currentTarget;
7 be.play( );
8 }
9 ]]>
10 </mx:Script>
11
12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="1000" />
13
14 <mx:Panel id="p" width="200" height="180" click="onClick(event)" />
15 </mx:Application>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 private function onClick(event:Event):void {
6 be.target = event.currentTarget;
7 be.play( );
8 }
9 ]]>
10 </mx:Script>
11
12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="1000" />
13
14 <mx:Panel id="p" width="200" height="180" click="onClick(event)" />
15 </mx:Application>
在代碼中看到,要使用效果,先定好一個效果,如上面的<mx:Blur ...>該標簽就是模糊效果的MXML標簽,定好效果后在Panel的點擊事件里再對該效果進行一些設(shè)置,如be.target = event.currentTarget 設(shè)置該效果將要應(yīng)用到的目標組件(Component),之后再調(diào)用play()方法后,該效果就會應(yīng)用在Panel上面播放!
(2)使用觸發(fā)器播放效果:
使用觸發(fā)器播放效果的話,可以不用寫ActionScript代碼,直接在組件的效果觸發(fā)器上指明使用哪個效果就可以了,比較簡單明了,但就不能進行更多的屬性定制,而用AS控制播放的話,可以對效果進行很多的設(shè)置再相應(yīng)根據(jù)情況播放,先看看觸發(fā)器播放的代碼:
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3
4 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
5
6 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" />
7 </mx:Application>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3
4 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
5
6 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" />
7 </mx:Application>
看以上代碼,先寫好了Blur的效果并設(shè)置好屬性后,duration="2000"這個是播放的時間以毫秒為單位。
在Panel標簽里有這樣一句:creationCompleteEffect="{be}" 這個就是觸發(fā)器,是該Panel組件的效果觸發(fā)器,當Panel組件加載完成時,會由系統(tǒng)自動調(diào)用該效果觸發(fā)器,觸發(fā)器里面指了觸發(fā) be 這個Blur效果
在Flex里面還有很多觸發(fā)器如:
addedEffect 被添加進容器時觸發(fā)效果
removedEffect 被從容器中移除時觸發(fā)效果
creationCompleteEffect 被創(chuàng)建成功時觸發(fā)效果
focusInEffect 獲得焦點時觸發(fā)
focusOutEffect 失去焦點時觸發(fā)
hideEffect 被隱藏時(visible=false)觸發(fā)
showEffect 被顯示時(visible=true)觸發(fā)
rollOverEffect 鼠標經(jīng)過時觸發(fā)
rollOutEffect 鼠標離開時觸發(fā)
mouseDownEffect 鼠標按下時觸發(fā)
mouseUpEffect 鼠標松開時觸發(fā)
moveEffect 被移動時觸發(fā)
resizeEffect 被重整大小時觸發(fā)
注意:這些都是效果觸發(fā)器,不要與事件觸發(fā)器混亂了。事件觸發(fā)器是rollOver,事件觸發(fā)器與效果觸發(fā)器差不多,事件觸發(fā)器是當用戶執(zhí)行相就操作時觸發(fā)事件,將會調(diào)用自定的事件觸發(fā)處理函數(shù),而效果觸發(fā)器是執(zhí)行相應(yīng)操作時被觸發(fā)并由系統(tǒng)自動調(diào)用所定的效果的play()方法。
現(xiàn)在說說效果的一些其它屬性:
每個效果都有reverse( );方法,該方法是反向播放,原本由小到大的變化,而調(diào)用reverse( );后再運行play()的話,效果將會從大到小進行播放。
但要注意的一點是,reverse( );不會自動播放,即是單單調(diào)用reverse( );的話,效果并不會播放,他只會記錄該效果為倒轉(zhuǎn),而要再調(diào)用play()后倒轉(zhuǎn)效果才會開始播放。而調(diào)用pause( )與resume( )就是暫停與繼續(xù)播放效果
startDelay這個屬性是設(shè)置效果的播放延時,以毫秒為單位,即要等待多少毫秒后效果才開始播放,如:
<mx:Blur id="be" blurXTo="50" startDelay="3000" />
該模糊效果將會在調(diào)用play()之后3秒才開始播放
repeatCount這個屬性是設(shè)置效果的重復(fù)次數(shù),默認為1,設(shè)置為0的話就是不停循環(huán)播放
<mx:Blur id="be" blurXTo="50" startDelay="3000" repeatCount="5" />
每個效果都有兩個事件:effectStart 與 effectEnd
你可以在該效果事件的處理函數(shù)里面對效果作相應(yīng)的操作,如:
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 import mx.events.EffectEvent;
6 public function onEffEnd(e:EffectEvent):void{
7 e.effectInstance.reverse();
8 e.effectInstance.play();
9 }
10 ]]>
11 </mx:Script>
12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
13
14 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" effectEnd="onEffEnd(event)" />
15 </mx:Application>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 import mx.events.EffectEvent;
6 public function onEffEnd(e:EffectEvent):void{
7 e.effectInstance.reverse();
8 e.effectInstance.play();
9 }
10 ]]>
11 </mx:Script>
12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
13
14 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" effectEnd="onEffEnd(event)" />
15 </mx:Application>
當效果播放完時,系統(tǒng)將會自動觸發(fā)effectEnd事件,在處理函數(shù)里面,將該效果Instance即現(xiàn)時播放的效果實例進行倒轉(zhuǎn)并播放,當播放完,又會觸發(fā)effectEnd事伯,這樣一直循環(huán)!
現(xiàn)在再來說說效果的組合:
通常如果你覺得只應(yīng)用一個效果很單調(diào)的話,可以進行效果組合應(yīng)用,即多個效果同時播放或者順序播放,
如,當加載頁面時,你想Panel先模糊到一定程度,再將Panel移動到某個位置,再把Panel還原成原來的清淅度(即消退模糊)。這樣分析一下,一共用了三個效果,一,先應(yīng)用Blur(由清至模)效果,當Blur完成時,再應(yīng)用Move效果,當Move完成時,再應(yīng)用另外一個Blur(由模至清)效果。這樣三個效果組合就是按順序組合,先后運行。先來看看效果:
再來看看代碼:
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3
4 <mx:Sequence id="sequenceEffect">
5 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
6 <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
7 <mx:Blur id="beIn" blurXFrom="50" blurYFrom="50" blurXTo="0" blurYTo="0" duration="500" />
8 </mx:Sequence>
9
10 <mx:Panel id="p" width="200" height="180" mouseDownEffect="sequenceEffect" />
11 </mx:Application>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3
4 <mx:Sequence id="sequenceEffect">
5 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
6 <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
7 <mx:Blur id="beIn" blurXFrom="50" blurYFrom="50" blurXTo="0" blurYTo="0" duration="500" />
8 </mx:Sequence>
9
10 <mx:Panel id="p" width="200" height="180" mouseDownEffect="sequenceEffect" />
11 </mx:Application>
看以上代碼,<mx:Sequence id="sequenceEffect">標簽就是順序組合效果標簽,當應(yīng)用sequenceEffect效果的時候,它會按順序播放該標簽里面的三個子效果。
另外的就是同時播放了,
1 <mx:Parallel id="parallelEffect">
2 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
3 <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
4 </mx:Parallel>
2 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
3 <mx:Move id="mv" xTo="200" yTo="150" duration="500" />
4 </mx:Parallel>
這個標簽就是同時播放的效果標簽,放在它里面的子效果都會同時播放,即一邊模糊一邊移動。這個都可以自由組合,<mx:Parallel>與<mx:Sequence>標簽都可以自由組合,例如先按順序先播放模糊,再同時播放移動與隱藏等。這里就不多說了。
使用Flex自帶的效果基本用法就這些,下篇文章將討論自定義效果的制作,下篇將會詳細說說這篇文章上面說到的 effectInstance 即實例與工廠的概念。