2009年02月28日
【技術】嵌入全畫面的Flash並設定最小高與寬
將Flash放到網頁中,使之隨著全螢幕縮放,主要有3種作法,各有優缺點:
- 將嵌入flash語法中的width、height設為100%。
優點:簡單易用。
缺點:無法限定最小寬度與高度,解析度不夠的時候一些內容會消失。 - 用JavaScript抓取瀏覽器長寬,監聽resize事件調整flash。(見範例一)
優點:可以做到限定最小及最大長寬。
缺點:有時邊緣並不是那麼準確。(有改善空間) - 用CSS擴充第1個方法中的作法,只是加入min-width等屬性。(見範例二)
優點:可以做到限定最小及最大長寬。
缺點:目前沒有。 - *Update:發現一個很棒的 script 套件 - swffit,用法見官網連結的Example Pages,這是屬於JavaScript的作法,相容於各大瀏覽器,除了能限定最小/大的長寬值外,還提供了更多功能函式,值得列入開發工具箱裡。
範例中的二種作法,檢視原始碼就有註解了,範例二是配合swfobject (swfobject.js、expressinstall.swf),也可以不要用swfobject 改成一般的內嵌語法。
至於在Flash中,則要視不同情況加入程式碼配合舞台(Stage)的縮放,像範例中的程式是直接借用【作品】應景: 讓部落格飄雪吧!中的程式,在ENTER_FRAME事件中不斷重新計算,每次落到底部就會自動以Stage寬度做為亂數基準出現,所以不需要修改它,但常見的應用則需要另外定位在角落或置中,作法如下:
- 設定Stage的縮放為"noScale", 並固定Stage的對齊模式:
(不同的模式會影響定位的方法)
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT; // 最左上角為(0, 0) - 監聽"resize"事件, 依照改變後的舞台大小調整目標物件的位置。
stage.addEventListener (Event.RESIZE, resizeHandler);
→ 點此變換隨機大小 ←
程式碼如下:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener (Event.RESIZE, resizeHandler);
function resizeHandler (e:Event):void {
// 固定在舞台相對位置
var segment:Number = 20;
topLeft.x = topLeft.y = segment; //左上
top.x = stage.stageWidth/2 - top.width/2; //置上
topRight.x = stage.stageWidth - top.width - segment; //右上
left.y = stage.stageHeight/2 - top.height/2; //置左
center.x = stage.stageWidth/2 - top.width/2; //置中
center.y = stage.stageHeight/2 - top.height/2;
right.x = stage.stageWidth - top.width - segment; //置右
right.y = stage.stageHeight/2 - top.height/2;
bottomLeft.y = stage.stageHeight- top.height- segment;//左下
bottom.x = stage.stageWidth/2 - top.width/2; //置下
bottom.y = stage.stageHeight - top.height - segment;
bottomRight.x = stage.stageWidth - top.width - segment;//右下
bottomRight.y = stage.stageHeight - top.height - segment;
// 背景物件(bg)隨著舞台縮放大小
bg.x = bg.y = segment/2;
bg.width = stage.stageWidth - segment;
bg.height = stage.stageHeight - segment;
}
topLeft、top、topRight、left、cener...等,分別為畫面上的左上、置上、右上、置左及置中的物件。
引用URL
http://cgi.blog.roodo.com/trackback/8362809
回應文章 

那很多元件的網站.一堆MC,做法不就非常非常非常的麻煩???
Posted by 米特
at 2009年06月25日 19:50
是阿..
所以要儘量把同類型的包在一起
例如要固定在右下角的做成同一個再統一處理
問題會簡化許多
Posted by 熊
at 2009年06月25日 23:20