上面依次插入同一个FLASH,而三者的颜色却不相同,如何实现这种效果了?方法很多:你可以用JS来设置FLASH中监视的颜色状态变量,你也可以使用FlashVars传递参数,甚至使用服务端再生成SWF文件…那我这里就要用SWFObject来展示一种更清晰、便捷的方法,先我们来看看上面效果页中的HTML代码:
<p style="float: left; margin: 10px; width: 100px; height: 100px; border: red 1px solid" id="dot_red">播放器版本需要8.0+</p> <p style="float: left; margin: 10px; width: 100px; height: 100px; border: red 1px solid" id="dot_green">播放器版本需要8.0+</p> <p style="float: left; margin: 10px; width: 100px; height: 100px; border: red 1px solid" id="dot_blue">播放器版本需要8.0+</p> <script type="text/javascript"> //red var so_red = new SWFObject("http://www.v-sky.com/blog/wp-content/uploads/2007/06/colorPanel.swf","c_red","100%","100%","8","#ff6600"); so_red.addVariable("color","0xff0000"); so_red.write("dot_red"); so_green.addVariable("color","0×00ff00"); so_green.write("dot_green"); so_blue.addVariable("color","0×0000ff"); so_blue.write("dot_blue"); |
从上面的代码中可以看出来,仅仅是使用了SWFObject的addVariable方法给SWF添加了一个变量color,而SWF中显示的颜色就是我们所设置的颜色值,这比起我们刚才说说到的其他解决方案是否简单多了?其实这里的作用原理就是SWFObject的addVariable方法将FlashVars的功能封装起来了,同时考虑了浏览器兼容,让我们给SWF的ROOT添加了color=”0xff0000″的变量。那么当页面打开时FLASH接收到这个变量然后做相应显示即可,下面是FLASH端的代码:
//获取FlashVars变量
//如果变量不存在,那么显示默认值
if(color==undefined){
color=0xFFFF00;
}
//库中有一个色块bg
var bg_mc:MovieClip = _root.attachMovie("bg", "bg", 1);
//设置颜色即可
new Color(bg_mc).setRGB(color);
JS跟FLASH通信时传递的变量是字符串形式,这点大家在使用时要十分注意,如果你需要的数据是Number类型,那么在FLASH接收以后需要做类型转换,否则会出现意想不到的BUG,而且极难发现。
对于我所指的灵活接口大家应该明白是指什么了,而且对其原理也应该理解了,或许有些朋友觉得这样做太麻烦了,我直接做三个FLASH,要什么颜色做什么颜色不就可以了吗?试想一下,假如我们的程序比较复杂了?例如是一套皮肤,而不仅仅只是上面一个颜色设置,那么你需要多少重复性的劳动了?下面我就来谈一下我认为的这种做法的优越性在哪儿:
一、灵活的接口更适合变动的需求,利于后期修改
在工作中我们时常会遇到变动不定的需求,就拿上面的颜色设置为例,如果我们今天做了一个绿色的,马上需求改动为一个红色的,那么我们可以很轻松地通过SWFObject来更改变量,而不需要打开源文件更改,重新编译。有些朋友可能觉得重新编译一次不费事,但如果你遇到比较复杂的程序,FLASH编译器的效率还是比较头痛的,又或者源程序现在公司,而你现在却在家里。
二、利于提高团队效率
对于经过磨合的团队而言,页面制作人员只要拿到了FLASH接口文档,那他就能很轻松利用SWFObject来将FLASH插入到HTML中,服务端人员也可以很轻松从数据库中读出数据然后动态设置SWFObject的变量值。三者的协作显得各司其职,有条不紊。拿一个XML的图片展示为例,FLASH端可以将XML的源地址做为变量接口留出来,那么服务端人员不需要将XML文件保存到双方约定好的位置,即使程序发生了改动,服务端人员也能很灵活地做出修改,而不需要让FLASH制作人员再做修改。设计出完善的接口可以做到“一次编译终身受用”。
下面是一个基于此思想的稍微复杂的实现-湖南卫视快乐男声的PK台,现在PK已经结束了,如果有兴趣的朋友以把这个SWF下载到本地调试,之前已经提到过设计出完善的接口可以做到“一次编译终身受用”。下面是SWFObject设置的的部分接口:
var so = new SWFObject("/res/flash/top.swf", "pkswf", "100%", "100%", "8", "#000000");
//记载选手信息的XML地址
so.addVariable("loadVote", "/hifly/pk_xml_output.php?pkid=1");
//投票地址
so.addVariable("sendVote", "/hifly/pk_vote.php?pkid=1");
//PK结束时间
so.addVariable("endTime","2007-4-10-17-0-0");
//当前时间,服务端校验,防止本地时间不准确
so.addVariable("nowTime","2007-05-27-14-23-39");
//设置投票动态更新的时间间隔
so.addVariable("getVote","10000$http://flash.local/getvote.php");
so.write("pkswf");
如何提供灵活的接口更多的是需要前期的设计,要求设计者懂得客户端和服务端技术,知道如何将二者高效、无缝地结合起来,这不仅仅是知道原理就行的东西,更多的是需要实践,总结,只有这样才能得到提高,探求出更好的方式,欢迎大家共同探讨。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |