首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

HTML页面元素统制FLASH

2012-09-14 
HTML页面元素控制FLASH如果抛离浏览器的平台,只是在FlashPlayer里播放我们的SWF文件,那么我们可以很自然地

HTML页面元素控制FLASH

如果抛离浏览器的平台,只是在FlashPlayer里播放我们的SWF文件,那么我们可以很自然地处理各个实例间的交互,但如果是在浏览器中运行我们的SWF文件了?我们能否将交互的范围扩大,让HTML页面的中元素来控制我们FLASH内部的交互了?答案是肯定的。

FlashVars? 参数传递符? JavaScript

以上三种方式都可以实现HTML中的元素来”控制”FLASH的播放,

?

下面我们来以一个简单的例子做个试验:
目的:HTML控制FLASH中动态文本的显示

?

一、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都兼容,同样需要两个地方都做更改-_-!


三、JavaScript的实现方式
JS的强大功能让我们能够自由操作HTML页面中的各种元素,FLASH也不例外,JS提供了一些方法来直接操作页面中的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的指定属性

延用上面的例子 我们来试验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”?onblur=”sendVar(this.value);”/>


4、测试IE浏览器通过
FF浏览器兼容
在FF中如果我们把FLASH的id写在了object中JS通信失败,解决方法是把id写如到embed中,而且object中不允许出现id的标签-_-!,所以要同时兼容IE?FF似乎不可能实现,哪位有实现方式欢迎交流
来源:http://blog.sina.com.cn/s/blog_6233e22a0100f172.html

热点排行