在论坛上经常看见有新手问到“我想让FLASH得到URL中的参数ID号,该怎么办?”“某某视频网站的FLASH播放器是如何播放不同ID的视频的?”...诸如此类问题看到了太多,每次都有一堆回帖,众说纷纭,里面难免有误导性质的回复。今天特结合自己平时工作中使用的心得对此类问题做一个小小的归纳。
我所指的静态传值是区别于与服务端通信进行值传递的方式,例如LoadVars,XML,Remoting之类,后者暂且不在本文的讨论范围内,当你想让FLASH获取URL中的参数时,你为何不换个角度想了?其实我们可以让服务端动态生成SWF的的插入代码,主动将我们需要的参数“静态”传递给FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何种形式传递给FLASH,就是我所指的静态传值。我知道的可行的HTML与FLASH之间的静态传值方法有三种:
下面来具体介绍下这三种方式的传递是如何工作的:
一、SWF地址后使用参数传递符“?”
我们知道,在ULR地址中使用参数传递符“?”可以以GET方式传递参数,例如http://www.v-sky.com?uid=12&uname=vsky,这里使用了参数传递符“?”,同时使用了连接符“&”做为变量分隔标识,以这种规范的格式来传递两个参数:uid=12和uname=vsky,那么服务端可以使用GET方式获取这两个值。
在FLASH中我们同样可以采用类似的方式来传递参数,HTML页面中插入SWF文件最常用的就是使用Object标签和Embed标签结合的方式,这也是Adobe的推荐方式:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="demo.swf?uid=12&uname=vsky" /> <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> |
二、FlashVars传递
你可以查阅FLASH帮助文档来看FlashVars的官方定义。其实在HTML语法中,这是一个被很多新手所忽视的属性,同样以上面的参数为例,下面用FlashVars来传递变量:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf" />
<param name="FlashVars" value="uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
跟方式一相同,它也是直接给FLASH里添加了这两个变量。但我个人推荐使用此方式,结合SWFObject的使用,使用FlashVars来传递变量有很多好处,例如代码清晰,容易管理,浏览其兼容,符合标准。他们的结合使用在“为FLASH程序构造灵活的接口”一文中我已经做了介绍(PS:随后我会提供一个复杂点的、有说服力的实际应用来说明这种灵活接口的使用)。
三、JS控制
对于客户端页面中的资源,JS通过DOM结构来控制它们可以说是随心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一览表:
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指定帧上的action TCallLabel(movie_clip,label)—————-call指定标签上的action TGetProperty(movie_clip,property)——–获取movie_clip的指定属性 TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性 |
window.document.VskyDemo.SetVariable("uid", 12);
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |