随着flash的日益普及, flash在web开发上面可是大显身手,既然是web-site,那当然离不开基本的html页面,以下是本人平时在制作flash站点时候经常要用到的与html方面的实用小技巧,不算多适合刚刚接触用flash进行web开发的朋友,希望能够对大家有一定的帮助,本人算不上什么高手,错误之处还是难免的,请大家多多包涵,谢谢!
1.动态解析flashweb应用程序的http服务器路径
玩过flash+asp/php开发的朋友都知道,在flash从后台脚本读取数据的时候,不能直接的
用如“loaddata.asp”这样的路径,必须是http://www.domain.com/application/loaddata.asp的路径。有些人问了?为什么呢?我说说我的理解,当flashplayer受到load(“loaddata.asp”)这个命令的时候,他会认为loaddata.asp文件是一个普通的txt文本文件,于是便不经过任何处理便直接读入flash内部,当然,读出的结果就是<%@language="vbscript" codepage="65001"%>,所以就无法根据我们的意愿来处理数据了,而当flashplayer执行load(“http://www.domain.com/application/loaddata.asp”)这个命令的时候,他就不再是本地的txt文件读取命令,而是一个http请求,flashplayer把这个请求发送到http服务器,服务器的iis解析脚本返回结果后flashplayer便可以正确的处理这些数据了。(废话一堆)
好了,进入正题,虽然输入http路径就可以正确读取数据,但是在程序开发测试阶段可能经常需要开发者更换服务器,那样就对我们造成了一定的麻烦,你每更换到另外一个服务器上面的时候就要修改一次他的http路径,如果读取了n(n≠0)个文件,难道还要手动修改n次?当然不是,那么通过下面这个小技巧便可以轻松解决这个问题:
把swf文件嵌入到一个asp页面里面,输入如下代码:
<%
dim pageurl,urlarry,i,applicationurl
pageurl="http://" & request.servervariables("http_host") & request.servervariables("url")
response.write "pageurl="&pageurl
urlarry=split(pageurl,"/")
arryubound=ubound(urlarry,1)-1
for i=0 to arryubound
applicationurl=applicationurl&urlarry(i)&"/"
next
response.write "<br>applicationurl="&applicationurl '这一句仅仅是测试代码是否正确,可省
%>
好了,对asp有一定了解的朋友应该都明白代码是什么意思了,php也可以用这种思路来写
下面在swf路径中可以这样写 <%="flash.swf?myserver="&applicationurl%> 这样就可以通过url把变量传递给swf文件,在flash影片中便可以直接访问这个变量了,就是_root.myserver。 好的,现在来让我们测试一下结果,先编写一个loaddata.asp,让他返回一个back变量。
打开flash,新建一个文件。然后在场景中拖入两个动态文本框,分别命名为txt.url 然后在第一帧输入以下代码:
mytxt=new loadvars()
mytxt.load(_root.myserver+"loaddata.asp")
mytxt.onload=function(success){
if(success){
txt.text=this.back
url.text=_root.myserver+"loaddata.asp"
}else{
txt.text="no file"
url.text=_root.myserver+"loaddata.asp"
}
}
好了,ctrl+enter,发布影片,,然后把swf文件嵌入之前的那个asp页面,就可以看看效果了,分别在ie地址栏里面输入http://127.0.0.1/**** , http://localhost/***** , http://本机ip地址/**** 如果都能正确读取,那就说明已经ok了,呵呵,下面的慢慢玩吧!
2.在html页中让flash成为透明背景
这个不算我自己发现的技巧,很早在经典论坛http://www.blueidea.com/bbs/看到水蓝色青蛙http://www.blueidea.com/bbs/viewuser.asp?username=qhwa 给一个网友的回复知道了这个方法,但好像知道的朋友很少,经常有些人问我类似这样的问题,今天把他作为一个实用技巧贡献给大家。
方法主要是在网页中的flash加入一个参数,让网页设定flash文件背景透明,flash文件本身做不到
这里以dreamwaver为例,点击flash文件,,然后点击“参数”按钮,弹出参数设定窗口,增加一个参数
<param name="wmode" value="transparent">
这样,在html页面中flash文件便可以透明了这个技巧主要感谢水蓝色青蛙,我仅仅是传播,呵呵~
类似的东东: http://www.dengjie.com/weblog/comment.asp?post_id=5 这是有关让swf文件在windows下打开时的窗体透明软件。
3.动态设定flash的尺寸大小
这个技巧来源于一个国外的实例,很实用,大家可以看看先http://www.dengjie.com/weblog/comment.asp?post_id=462
在线演示http://2mdc.com/resizableflash/
这个技巧非常适合一些无极扩展菜单之类的特效,可以脱离html大小的限制,任意增加菜单的长度,下面就以蛋蛋的flash+xml无极扩展菜单为例子,如何动态设定flash文件在html页面中的大小
最终效果演示: http://www.blackflasher.net/download/index.htm
首先我们来分析一下这个xml菜单的代码:
//建立顶级菜单
function creatrootmenu() {
_root.creatmymenu(menudata.firstchild);
}
这个函数主要是调用了creatmymenu()函数,搜索整个代码,找到creatmymenu()函数
//建立子菜单
function creatmymenu(a, b) {
for (var i = 0; i<a.childnodes.length; i++) {
this.createemptymovieclip("item"+i, i);
var mymenu = this["item"+i];
mymenu.creatmenu(a.childnodes[i], i, b);
}
}
creatmymenu()引入了2个值,其中a是一个xml对象,那么我们如果要计算新的尺寸,就需要知道一共打开了多少个菜单,可以在函数中加一句trace("这个子菜单有"+a.childnodes.length),然后测试影片,返回结果为 这两次返回的结果主要是第一次生成了3个主菜单,而主菜单的生成函数中嵌入了一个检查菜单是否展开的函数,若展开则继续生成子菜单,既第一个分类中的7个子菜单。
现在已经确定了菜单初始化时生成的数量,下一步确定菜单在打开和关闭时所生成的数量。
大概浏览一下整体代码,可以看到有一个函数menudrawbg()其中有好几个鼠标事件,那么这个函数应该是决定鼠标事件出发以后所执行命令的函数。我们主要看onrelease事件:
this.bg.onrelease = function() {
geturl(this._parent.xmldata.attributes.url,this._parent.xmldata.attributes.targetwindo);
if (!(number(this._parent.xmldata.attributes.open))) {
this._parent.xmldata.attributes.open = 1;
this._parent.creatmenu(this._parent.xmldata, this._parent.xmlindex, 1);
} else {
if (number(this._parent.xmldata.attributes.open)) {
this._parent.item.removemovieclip();
this._parent.xmldata.attributes.open = 0;
}
}
};
这个事件中主要判断xml对象中的open属性,控制开/关,首先判断“!(number(this._parent.xmldata.attributes.open)”条件既若菜单的open属性为0则打开菜单,再往下看,先不要急着取得打开的菜单数目,可以看到里面调用了一个creatmenu()函数,搜索找到creatmenu()函数。最后找到这一句:“movieclip.prototype.creatmenu = menuinit;”往下看,就是menuinit函数的定义,稍微看看你可以发现这个函数也调用了creatmymenu()函数,我们之前已经修改过了creatmymenu()函数,那么这里则可以省去这个步骤,下面看看关闭菜单的代码,其中的xml对象为this._parent.xmldata,那么要取得关闭菜单的数目取得this._parent.xmldata的项数即可,增加一个trace("菜单关上"+this._parent.xmldata.childnodes.length)语句,然后测试。
测试无误后,下面要开始计算新的高度。在代码中加如下列语句:
function newsize(width,height){
_root.nowheight=height
trace("新的宽度为"+width+",新的高度为"+height)
}
这里先测试计算结果是否正确,然后在之前修改好的几个函数中分别加入这样的语句
_root.newsize(0,取得的菜单数量*(菜单宽度+菜单间隔))
测试一切正常以后,就可以把flash和html结合起来了
先把之前的加入的语句做点修改:
function newsize(width,height){
geturl("javascript:newsize(550,"+height+")")
_root.nowheight=height
}
通过geturl()函数来调用在html页面中定义好的javascript函数,下面是newsize()函数的代码:
<script language="javascript">
<!--
function newsize(datox,datoy) {
if(document.all && !document.getelementbyid) {
document.all['menu'].style.pixelwidth = datox;
document.all['menu'].style.pixelheight = datoy;
}else{
document.getelementbyid('menu').style.width = datox;
document.getelementbyid('menu').style.height = datoy;
}
}
//-->
</script>
这段代码并不难理解,主要是设定id为menu的对象的css中一些属性,既width和height
在html页面中,新建两个表格,一个为2行2列,另外一个为单行单列,页边距均为0,插入几幅漂亮的图片然后在表格1里面的一个单元格插入一个flash文件,并且参数设定如下:
最后,在代码中给flash文件加入这样的属性name="menu" style="width:1px;height:1px;
好了,现在就可以测试你的结果了。这个技巧主要是在于flash参数的传递和javascript函数的编写上面,有兴趣的朋友还可以再发挥发挥,看看能不能搞出什么新花样来。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器