正是有了瀏覽器這個大舞臺,,才使得FLASH能夠在互聯網上大放光彩,,而在她友好而靈活的互動性背后實際上是程序的交互,,這就帶來了一個不容忽視的問題--交互對象是誰,? 如果拋離瀏覽器的平臺,只是在FlashPlayer里播放我們的SWF文件,,那么我們可以很自然地處理各個實例間的交互,,但如果是在瀏覽器中運行我們的SWF文件了?我們能否將交互的范圍擴大,,讓HTML頁面的中元素來控制我們FLASH內部的交互了,?答案是肯定的。
目的:HTML控制FLASH中動態(tài)文本的顯示(PS:太簡單哦,先打好基礎嘛) 一,、FlashVars的實現方式 1,、FLASH文件的制作: 建立main.fla文件; 在場景里放入一個動態(tài)文本,,實例名_txt,; 加入代碼: _txt.text = arg; 發(fā)布文件(這里看到的是undefined ,因為我們還沒有賦值) 2,、打開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中加入粗體的那行代碼,,然后打開main.html,,文本框已經獲取到了我們的賦值Internet Explorer 我們能否傳遞多個參數,?能! 方法一:將我們要傳遞的參數用間隔符號隔開,,然后FLASH接收字符串拆分 (這是我們最容易想到的方法) 方法二:聯想到FLASH與文本的通信我們可以嘗試也是用&符號來間隔變量,,通過試驗是可行的。 1.<param name=”FlashVars” value=”arg=Internet Explorer&arg2=hello” /> 1.AS 改寫為 _txt.text = arg+”:”+arg2; 測試:我們接收到了兩個變量,,成功,! 實際意義:與服務器語言結合,能夠動態(tài)改變flashvars的value,,使FLASH做出不相應的響應,;相比一些通過URL傳遞參數的方法,這個傳遞的參數個數和長度不受URL地址長度的限制,。 瀏覽器兼容: 在IE中測試通過,,在FireFox中再做測試,發(fā)現FLASH無法獲取到我們的參數,,這是因為FF與IE接收FlashVars的格式不同: 對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中測試通過,因此為了兼容瀏覽器,,我們最好是兩處都做修改,。 二、參數傳遞符的實現方式 在URL請求中我們通常使用 “?”來傳遞參數,,使用”&”來傳遞多個參數,,如果用瀏覽器方式打開SWF文件,然后使用URL傳遞參數那么SWF能夠接收到參數嗎,?可以做個簡單的測試,,答案是可以的。但如果把這個SWF嵌入到HTML頁中了,?SWF就無法直接接收URL里傳遞的參數,,因此這里需要另外一種做法。 依然使用上面的例子,,我們在HTML頁中插入SWF文件,,然后更改: <param name=”movie” value=”mian.swf?arg=IE&arg2=FF” /> 測試HTML頁面,,成功接收兩個參數。 瀏覽器兼容: 為了在FF中兼容,,需要修改embed標簽 <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都兼容,,同樣需要兩個地方都做更改-_-! 三、JavaS JS的強大功能讓我們能夠自由操作HTML頁面中的各種元素,,FLASH也不例外,,JS提供了一些方法來直接操作頁面中的FLASH元素 Flash Player的Javas Play() —————————————- 播放動畫 StopPlay()————————————停止動畫 IsPlaying()———————————– 動畫是否正在播放 GotoFrame(frame_number)—————- 跳轉到某幀 TotalFrames()——————————- 獲取動畫總幀數 CurrentFrame()——————————回傳當前動畫所在幀數-1 Rewind()————————————-使動畫返回第一幀 SetZoomRect(left,top,right,buttom)——-放大指定區(qū)域 Zoom(percent)——————————改變動畫大小 Pan(x_position,y_position,unit)————使動畫在x,y方向上平移 PercentLoaded()—————————-返回動畫被載入的百分比 LoadMovie(level_number,path)———– 加載動畫 TGotoFrame(movie_clip,frame_number)- movie_clip跳轉到指定幀數 TGotoLabel(movie_clip,label_name)—— movie_clip跳轉到指定標簽 TCurrentFrame(movie_clip)————— 回傳movie_clip當前幀-1 TCurrentLabel(movie_clip)—————–回傳movie_clip當前標簽 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指定標簽上的act TGetProperty(movie_clip,property)——–獲取movie_clip的指定屬性 TSetProperty(movie_clip,property,number)-設置movie_clip的指定屬性 延用上面的例子 我們來試驗SetVariable(variable_name,value)–變量賦值 這個方法: 1、設置插入的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); } 上面這段粗體代碼即可訪問到該頁面中id為main的FLASH 3,、在HTML頁面中加入一個文本框表單,在焦點失去時調用上面的JS方法,,將文本框中的數值在FLASH中傳送 <input name=”" type=”text” on 4,、測試IE瀏覽器通過 FF瀏覽器兼容 在FF中如果我們把FLASH的id寫在了object中JS通信失敗,解決方法是把id寫如到embed中,,而且object中不允許出現id的標簽-_-!,,所以要同時兼容IE FF似乎不可能實現,哪位有實現方式歡迎交流 |
|