星期六, 5月 16, 2009

AS2呼叫Javascript隱藏(/顯示)指定的Div

有時候我們會在yahoo或其它網站看到Flash的廣告banner在畫面中播放完後自動向上收回去,這效果滿有趣的,因為你可以讓大家看到一個比較完整的廣告效果,然後向上縮回,只留下另一個小廣告banner在同一個位置,不會讓大的廣告banner一直佔據網頁的空間。

其實,這只是在同一個地方放了兩個banner,一個大的、一個小的,播完大banner以後再留下小banner;我們可以用兩個div分別置放大、小banner,然後把播完廣告的大banner在畫面中刪除!

或者,也可以在同一個swf檔裡做兩個banner,在播完大banner之後,讓時間軸跳到小banner的地方,不讓別人看到原來大banner的畫面。

不過,這些都不是困難的問題,我們比較好奇的是,是什麼原因讓大banner播完後,Firefox竟然忘不了這個大banner曾經播放過的事實,因此留下原本大banner的「透明」區塊在畫面之中?!也許這層透明區塊不會對畫面造成影響,但另一個問題是…區塊底下的東西竟然無法點選、連結?!這個可麻煩了!真不知道該怎麼辦才好…

沒關係,感謝Javascript和CSS的強大功能,因為我們可以在Flash中呼叫Javascript功能,讓Javascript使用CSS設定,讓指定的Div消失於無形~!哈哈哈!!!

首先我們要讓Flash在特定的時間或事件之中觸發Javascript機制,例如播完影片之後,或者因為我們已經看過這個畫面,不想再看了!於是,我們可以在時間軸中加上底下的Actionscript(AS2):
getURL("javaScript:hideItem('hideThisDiv');","");
//讓Javascript知道要隱藏哪個Div
接著在html加入底下這段Javascript即可讓Flash自動隱藏起來:
<script type="text/javascript">
<!--
function hideItem(divID) {
hiddenID = document.getElementById(divID);
hiddenID.style.display = "none";
}
//-->
</script>

既然Javascript是用CSS的方式將Div隱藏起來(display:none;),我們同樣也可以把它叫出來,只要將「none」改為「block」(或其它非none的參數應該都可行):
hiddenID.style.display = "block";

6 則留言:

匿名 提到...

請問有範例檔可以參考嗎??感謝您的分享

perr 提到...

很遺憾,並沒有範例檔耶!因為這是我工作上曾經遇到過的問題,我只是把它記下來提醒自己,同時也給其他遇到類似問題的人做參考。

如果你有遇到同樣的問題也可以提出來討論唷!

Muka 提到...

謝謝你提供的好用的做法,但是可能是我對程式碼不熟,所以怎麼試都沒有成功。

所以是更改 ('hideThisDiv') 跟 (divID) 成自己在網頁裡面的DIV代碼嚕?

perr 提到...
作者已經移除這則留言。
perr 提到...

hideThisDiv指的是你要Flash隱藏的DIV名稱。divID是參數值的名稱,維持一致即可;其目的是告訴javascript將要放一個東西進來,然後它會照你給的指令作用。
換言之,divID不必改,但「hideThisDiv」一定要指定欲隱藏的DIV名稱。

Javascript的程式片段中有個「getElementById」的指令,它的目的是取得DIV的ID名稱,所以你不需在Flash的hideThisDiv前面加上井號(#)。

Muka 提到...

謝謝您!