星期六, 2月 27, 2010

SWFObject搭配Flash Scaler,另一個實現全螢幕Flash的小技巧!

先前提到SWFFit這個補強全螢幕Flash不足的小工具,但Flash Scaler其實也是一個滿不錯用的工具!用法不難,同樣要先載入Flash Scaler的javascript(flashscaler.js):
<script type="text/javascript" src="js/flashscaler.js"></script>

然後確定我們要用另一個DIV(ID名稱設為「flashcontent」)將SWFObject要指定的flash DIV給包起來,將底下這段程式碼放進body裡面:
<script type="text/javascript">
  scale = new FlashScaler("flashcontent",1000,650);
</script>

它的寫法規則是:FlashScaler("DIV名稱",最小寬度,最小高度);。
並且為DIV新增一個CSS樣式:
#flashcontent {
  overflow: hidden;
}

Flash Scaler有幾個特別要注意的地方:
1. 指定的DIV必須要包住SWFObject指定的Flash DIV;
2. 指定的DIV必須是要新增「overflow:hidden;」屬性。

參考的完整程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Scalable Flash with scrollbars (SWFObject dynamic publishing example)</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="StyleSheet" href="css/main.css" type="text/css" media="screen,print" />
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript" src="js/flashscaler.js"></script>
<script type="text/javascript">
var flashvars = {};

var params = { };
params.scale = "noScale";
params.wmode = "transparent";

var attributes = {};

swfobject.embedSWF("fullscreen.swf", "myFlash", "100%", "100%", "8", false, flashvars, params, attributes);
</script>
<style type="text/css">
<!--
html, body { margin: 0;padding:0;background: #351100;overflow:visible;height:100%; }
#flashcontent {
overflow: hidden;
}
-->
</style>
</head>
<body>
<div id="flashcontent">
<script type="text/javascript">
scale = new FlashScaler("flashcontent",1000,650);
</script>
<div id="myFlash">
<h2>SORRY!</h2>
<p>We have detected that you do not have the Flash Player plugin required to view this website.</p>
<p>Download the latest <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">Flash Player</a>
for free! It takes just a few minutes to download and install.</p>
</div>
</div>
</body>
</html>

用SWFObject搭配SWFFit,讓全螢幕Flash也可以很聰明

SWFObject確實讓Flash置入網頁的程式碼減少很多,而且在全螢幕Flash的時候不會產生討厭的視窗捲軸!可是,相反的,它在這個時候就缺少了一個看似不起眼、但卻也仍有其必要性的功能:視窗捲軸!

說來還真矛盾,我們不就希望不要有視窗捲軸嗎?考慮底下的情形:
假設我們的「全螢幕Flash(Fullscreen Flash)」的最佳顯示區域是寬1000px、高650px,它在螢幕解析度為800x600像素的電腦觀看時(或者你的瀏覽器畫面小於1000x650像素時),因為SWFObject的關係,你的瀏覽器不會出現垂直或水平的視窗捲軸!換言之,你很可能沒辦法看見周圍被切掉的地方!

好在SWFFit提供了一個相當友善的解決方式!讓瀏覽器會自動出現垂直或水平捲軸的功能(讓你看見看不見的地方!)!不過它必須配合SWFObject才能實現這個功能。

SWFFit說明如下:

首先載入SWFFit這支js(放在載入SWFObject的js底下):
<script type="text/javascript" src="js/swffit.js"></script>

接著在設定適當的參數,讓SWFFit知道它該怎麼做(也可以直接加到SWFObject的參數設定後面):
<script type="text/javascript">
  swffit.fit('myFlash',1000,650,2000,1300, true, true);
</script>

SWFFit的編寫同樣的規則可循:swffit.fit('Flash的id名稱',Flash顯示的最小寬度,最小高度,最大寬度,最大高度, 是否水平置中, 是否垂直置中);

參考的完整程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Fullscreen Flash via SWFObject and SWFFit</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript" src="js/swffit.js"></script>
<script type="text/javascript">
var flashvars = {};
var params = {};
params.menu="false";
params.allowscriptaccess="samedomain";
params.bgcolor="#351100";
params.scale= "noScale";
params.wmode="transparent";
var attributes = {};
attributes.id= "myFlash";
attributes.name= "myFlash";
attributes.align= "center";
swfobject.embedSWF('swf/myFlash.swf', 'myFlash', '100%', '100%', '9', 'swf/expressInstall.swf', flashvars, params, attributes);
swffit.fit('myFlash',1000,650,2000,1300, true, true);
</script>
<style type="text/css">
<!--
html, body { margin: 0;padding:0;background: #351100;overflow:hidden;height:100%; }
-->
</style>
</head>
<body>
<div align="center" id="myFlash">
<p>請安裝最新版的Flash Player</p>
<p>
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
</p>
</div>
</body>
</html>

不過在我測試的時候,發現SWFFit 2.3.3在Mac(Leopard 10.5.8)的FireFox(version 3.6)下可能會出現一個奇特的情形(bug?!):在全螢幕Flash的畫面中做任何的互動動作(例如隨便在畫面中點一下),垂直和水平的視窗捲軸竟然同時出現了(而且還是撐到最大的那種@@)!但在PC上面卻沒有這個問題!可惜目前我還找不到解決的方法(知道的人麻煩提供一下吧!大感謝!)…但SWFFit 2.4 beta似乎沒這個問題!

有其它替代可行的方案嗎?目前我看到的有Flash Scaler以及SWF-Force-Size,有機會再來介紹。