正是有了浏览器这个大舞台,才使得FLASH能够在互联网上大放光彩,而在她友好而灵活的互动性背后实际上是程序的交互,这就带来了一个不容忽视的问题--交互对象是谁? 如果抛离浏览器的平台,只是在FlashPlayer里播放我们的SWF文件,那么我们可以很自然地处理各个实例间的交互,但如果是在浏览器中运行我们的SWF文件了?我们能否将交互的范围扩大,让HTML页面的中元素来控制我们FLASH内部的交互了?答案是肯定的。
目的:HTML控制FLASH中动态文本的显示(PS:太简单哦,先打好基础嘛) 一、FlashVars的实现方式 1、FLASH文件的制作: 建立main.fla文件; 在场景里放入一个动态文本,实例名_txt; 加入代码: _txt.text = arg; 发布文件(这里看到的是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; 测试:我们接收到了两个变量,成功! 实际意义:与服务器语言结合,能够动态改变flashvars的value,使FLASH做出不相应的响应;相比一些通过URL传递参数的方法,这个传递的参数个数和长度不受URL地址长度的限制。 浏览器兼容: 在IE中测试通过,在FireFox中再做测试,发现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)——-放大指定区域 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似乎不可能实现,哪位有实现方式欢迎交流 |
|