正是有了瀏覽器這個(gè)大舞臺(tái),才使得FLASH能夠在互聯(lián)網(wǎng)上大放光彩,而在她友好而靈活的互動(dòng)性背后實(shí)際上是程序的交互,這就帶來(lái)了一個(gè)不容忽視的問(wèn)題--交互對(duì)象是誰(shuí)? 如果拋離瀏覽器的平臺(tái),只是在FlashPlayer里播放我們的SWF文件,那么我們可以很自然地處理各個(gè)實(shí)例間的交互,但如果是在瀏覽器中運(yùn)行我們的SWF文件了?我們能否將交互的范圍擴(kuò)大,讓HTML頁(yè)面的中元素來(lái)控制我們FLASH內(nèi)部的交互了?答案是肯定的。
目的:HTML控制FLASH中動(dòng)態(tài)文本的顯示(PS:太簡(jiǎn)單哦,先打好基礎(chǔ)嘛) 一、FlashVars的實(shí)現(xiàn)方式 1、FLASH文件的制作: 建立main.fla文件; 在場(chǎng)景里放入一個(gè)動(dòng)態(tài)文本,實(shí)例名_txt; 加入代碼: _txt.text = arg; 發(fā)布文件(這里看到的是undefined ,因?yàn)槲覀冞€沒(méi)有賦值) 2、打開(kāi)main.html文件 <object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#v ersion=8,0,0,0″ width=”550″ height=”400″ id=”main” align=”middle”> <param name=”allowScriptAccess” value=”sameDomain” /> <param name=”movie” value=”main.swf” /> <param name=”FlashVars” value=”arg=Internet Explorer” /> <param name=”quality” value=”high” /> <param name=”bgcolor” value=”#ffffff” /> <embed src=”main.swf” quality=”high” bgcolor=”#ffffff” width=”550″ height=”400″ name=”main” align=”middle” allowScriptAccess=”sameDomain” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer”/> </object> 在object中加入粗體的那行代碼,然后打開(kāi)main.html,文本框已經(jīng)獲取到了我們的賦值Internet Explorer 我們能否傳遞多個(gè)參數(shù)?能! 方法一:將我們要傳遞的參數(shù)用間隔符號(hào)隔開(kāi),然后FLASH接收字符串拆分 (這是我們最容易想到的方法) 方法二:聯(lián)想到FLASH與文本的通信我們可以嘗試也是用&符號(hào)來(lái)間隔變量,通過(guò)試驗(yàn)是可行的。 1.<param name=”FlashVars” value=”arg=Internet Explorer&arg2=hello” /> 1.AS 改寫(xiě)為 _txt.text = arg+”:”+arg2; 測(cè)試:我們接收到了兩個(gè)變量,成功! 實(shí)際意義:與服務(wù)器語(yǔ)言結(jié)合,能夠動(dòng)態(tài)改變flashvars的value,使FLASH做出不相應(yīng)的響應(yīng);相比一些通過(guò)URL傳遞參數(shù)的方法,這個(gè)傳遞的參數(shù)個(gè)數(shù)和長(zhǎng)度不受URL地址長(zhǎng)度的限制。 瀏覽器兼容: 在IE中測(cè)試通過(guò),在FireFox中再做測(cè)試,發(fā)現(xiàn)FLASH無(wú)法獲取到我們的參數(shù),這是因?yàn)镕F與IE接收FlashVars的格式不同: 對(duì)mian.html稍作修改: 去掉我們添加的那行粗體代碼; 更改: <embed src=”main.swf” quality=”high” flashvars=”arg=Internet Explorer&arg2=hello”bgcolor=”#ffffff” width=”550″ height=”400″ name=”main” align=”middle” allowScriptAccess=”sameDomain” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer” /> FF中測(cè)試通過(guò),因此為了兼容瀏覽器,我們最好是兩處都做修改。 二、參數(shù)傳遞符的實(shí)現(xiàn)方式 在URL請(qǐng)求中我們通常使用 “?”來(lái)傳遞參數(shù),使用”&”來(lái)傳遞多個(gè)參數(shù),如果用瀏覽器方式打開(kāi)SWF文件,然后使用URL傳遞參數(shù)那么SWF能夠接收到參數(shù)嗎?可以做個(gè)簡(jiǎn)單的測(cè)試,答案是可以的。但如果把這個(gè)SWF嵌入到HTML頁(yè)中了?SWF就無(wú)法直接接收URL里傳遞的參數(shù),因此這里需要另外一種做法。 依然使用上面的例子,我們?cè)贖TML頁(yè)中插入SWF文件,然后更改: <param name=”movie” value=”mian.swf?arg=IE&arg2=FF” /> 測(cè)試HTML頁(yè)面,成功接收兩個(gè)參數(shù)。 瀏覽器兼容: 為了在FF中兼容,需要修改embed標(biāo)簽 <embed src=”mian.swf?arg=IE&arg2=FF” quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer” type=”application/x-shockwave-flash” width=”300″ height=”400″> 如果要IE FF都兼容,同樣需要兩個(gè)地方都做更改-_-! 三、JavaS JS的強(qiáng)大功能讓我們能夠自由操作HTML頁(yè)面中的各種元素,F(xiàn)LASH也不例外,JS提供了一些方法來(lái)直接操作頁(yè)面中的FLASH元素 Flash Player的Javas Play() —————————————- 播放動(dòng)畫(huà) StopPlay()————————————停止動(dòng)畫(huà) IsPlaying()———————————– 動(dòng)畫(huà)是否正在播放 GotoFrame(frame_number)—————- 跳轉(zhuǎn)到某幀 TotalFrames()——————————- 獲取動(dòng)畫(huà)總幀數(shù) CurrentFrame()——————————回傳當(dāng)前動(dòng)畫(huà)所在幀數(shù)-1 Rewind()————————————-使動(dòng)畫(huà)返回第一幀 SetZoomRect(left,top,right,buttom)——-放大指定區(qū)域 Zoom(percent)——————————改變動(dòng)畫(huà)大小 Pan(x_position,y_position,unit)————使動(dòng)畫(huà)在x,y方向上平移 PercentLoaded()—————————-返回動(dòng)畫(huà)被載入的百分比 LoadMovie(level_number,path)———– 加載動(dòng)畫(huà) TGotoFrame(movie_clip,frame_number)- movie_clip跳轉(zhuǎn)到指定幀數(shù) TGotoLabel(movie_clip,label_name)—— movie_clip跳轉(zhuǎn)到指定標(biāo)簽 TCurrentFrame(movie_clip)————— 回傳movie_clip當(dāng)前幀-1 TCurrentLabel(movie_clip)—————–回傳movie_clip當(dāng)前標(biāo)簽 TPlay(movie_clip)—————————播放movie_clip TStopPlay(movie_clip)———————-停止movie_clip的播放 GetVariable(variable_name)—————–獲取變量 SetVariable(variable_name,value)———–變量賦值 TCallFrame(movie_clip,frame_number)—call指定幀上的act TCallLabel(movie_clip,label)—————-call指定標(biāo)簽上的act TGetProperty(movie_clip,property)——–獲取movie_clip的指定屬性 TSetProperty(movie_clip,property,number)-設(shè)置movie_clip的指定屬性 延用上面的例子 我們來(lái)試驗(yàn)SetVariable(variable_name,value)–變量賦值 這個(gè)方法: 1、設(shè)置插入的FLASH的object中id屬性為”main” <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#v ersion=7,0,19,0″ width=”400″ height=”180″ id=”main”> 2、自定義JS方法 function sendVar(args){ window.document.mian.SetVariable(”myVar.text”, args); } 上面這段粗體代碼即可訪問(wèn)到該頁(yè)面中id為main的FLASH 3、在HTML頁(yè)面中加入一個(gè)文本框表單,在焦點(diǎn)失去時(shí)調(diào)用上面的JS方法,將文本框中的數(shù)值在FLASH中傳送 <input name=”" type=”text” on 4、測(cè)試IE瀏覽器通過(guò) FF瀏覽器兼容 在FF中如果我們把FLASH的id寫(xiě)在了object中JS通信失敗,解決方法是把id寫(xiě)如到embed中,而且object中不允許出現(xiàn)id的標(biāo)簽-_-!,所以要同時(shí)兼容IE FF似乎不可能實(shí)現(xiàn),哪位有實(shí)現(xiàn)方式歡迎交流 |
|
來(lái)自: 悟靜 > 《平面設(shè)計(jì)》