2009年02月28日

【技術】嵌入全畫面的Flash並設定最小高與寬

將Flash放到網頁中,使之隨著全螢幕縮放,主要有3種作法,各有優缺點:
  1. 將嵌入flash語法中的width、height設為100%。
    優點:簡單易用。
    缺點:無法限定最小寬度與高度,解析度不夠的時候一些內容會消失。
  2. 用JavaScript抓取瀏覽器長寬,監聽resize事件調整flash。(見範例一)
    優點:可以做到限定最小及最大長寬。
    缺點:有時邊緣並不是那麼準確。(有改善空間)
  3. 用CSS擴充第1個方法中的作法,只是加入min-width等屬性。(見範例二)
    優點:可以做到限定最小及最大長寬。
    缺點:目前沒有。
  4. *Update:發現一個很棒的 script 套件 - swffit,用法見官網連結Example Pages,這是屬於JavaScript的作法,相容於各大瀏覽器,除了能限定最小/大的長寬值外,還提供了更多功能函式,值得列入開發工具箱裡。

範例中的二種作法,檢視原始碼就有註解了,範例二是配合swfobject (swfobject.jsexpressinstall.swf),也可以不要用swfobject 改成一般的內嵌語法。

至於在Flash中,則要視不同情況加入程式碼配合舞台(Stage)的縮放,像範例中的程式是直接借用【作品】應景: 讓部落格飄雪吧!中的程式,在ENTER_FRAME事件中不斷重新計算,每次落到底部就會自動以Stage寬度做為亂數基準出現,所以不需要修改它,但常見的應用則需要另外定位在角落或置中,作法如下:

  1. 設定Stage的縮放為"noScale", 並固定Stage的對齊模式:
    (不同的模式會影響定位的方法)
    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.align = StageAlign.TOP_LEFT; // 最左上角為(0, 0)
  2. 監聽"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...等,分別為畫面上的左上、置上、右上、置左及置中的物件。



Posted by esabear at 樂多Roodo! │11:21 │回應(2)引用(0)Flash筆記
樂多分類:網路/3C 共同主題:Flash筆記 工具:編輯本文
標籤:JavaScript,fullscreen,flash
Ads by Roodo! 

引用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