返回首页

此页面上的内容需要较新版本的 Adobe Flash Player。

获取 Adobe Flash Player

    您现在的位置是:Flash动画3D模型
      随着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函数的编写上面,有兴趣的朋友还可以再发挥发挥,看看能不能搞出什么新花样来。
CopyRight2010 银川慧科网络有限公司版权所有 银川网络公司 银川网站建设 银川网站制作 银川seo 宁夏企业邮局
地址:宁夏银川市正源北街万达广场B座1707
电话:0951-6048280 18195099882 13709590950
宁ICP备08000251