OTHER PAGES

WELCOME

Move your mouse onto the image to see the bravo CSS3 Transition!

2013年11月3日 星期日

延遲自動調整大小的SWF(與throttle)

常常在製作一個Flex專案的時候,我們不希望自己已經排好的版面因為使用者任意拖曳視窗邊框或螢幕大小不同而走樣,所以會用強制指定像素的方式來讓物件排好。Flash沒有這些問題,可以透過scaleMode來調整,然而,Flex因為內容的大小已經寫死,如果視窗比內容大,周圍會有白框不好看;如果視窗比內容小,則會出現捲軸(如果有的話。如果沒有就...),參考範例如下。



也許這時候需要改用百分比(%)來指定版面樣式,可是一般需要比較多時間設計,字型當然也要配合版面調整,甚是麻煩。因此我一直在想,有沒有一個一勞永逸的辦法?
Google之後,查到頗簡單的做法是在Application加入
preinitialize="systemManager.stage.scaleMode = 'showAll'; systemManager.stage.align='';"
即可。這樣會造成什麼結果呢?


可以做出想要的效果,很顯然有個可以改進之處:「如果我希望在改變大小完成的時候才完成縮放,要怎麼做?」

這需要一點技巧,關鍵在於「完成」這個動作是不會引發任何事件的!那我們難道要持續追蹤這個事件才能知道什麼時候才可以開始調整嗎?當然不用。網路上有高手已經把這個方法包裝成一個名叫throttle(後來改名為debounce)的函數,參見:
http://remysharp.com/2010/07/21/throttling-function-calls/

範例程式碼如下,必須用Flash Builder 4編譯。
範例就省略了。不過Flash似乎只支援整數大小的字型,所以縮放之後會有點卡卡的。如果有更好的做法之後會再補上。
張貼留言