Flash 与 html 的一些实用技巧.docx

上传人:b****5 文档编号:28316211 上传时间:2023-07-10 格式:DOCX 页数:38 大小:230.36KB
下载 相关 举报
Flash 与 html 的一些实用技巧.docx_第1页
第1页 / 共38页
Flash 与 html 的一些实用技巧.docx_第2页
第2页 / 共38页
Flash 与 html 的一些实用技巧.docx_第3页
第3页 / 共38页
Flash 与 html 的一些实用技巧.docx_第4页
第4页 / 共38页
Flash 与 html 的一些实用技巧.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

Flash 与 html 的一些实用技巧.docx

《Flash 与 html 的一些实用技巧.docx》由会员分享,可在线阅读,更多相关《Flash 与 html 的一些实用技巧.docx(38页珍藏版)》请在冰豆网上搜索。

Flash 与 html 的一些实用技巧.docx

Flash与html的一些实用技巧

Flash与html的一些实用技巧

随着Flash的日益普及, Flash在WEB开发上面可是大显身手,既然是WEB-Site,那当然离不开基本的Html页面,以下是本人平时在制作Flash站点时候经常要用到的与Html方面的实用小技巧,不算多适合刚刚接触用Flash进行WEB开发的朋友,希望能够对大家有一定的帮助,本人算不上什么高手,错误之处还是难免的,请大家多多包涵,谢谢!

1.动态解析FlashWEB应用程序的HTTP服务器路径

玩过Flash+ASP/PHP开发的朋友都知道,在Flash软件里测试Flash从后台脚本读取数据的时候,不能直接的用如“loaddata.asp”这样的路径,必须是 或者http:

开头的路径。

有些人问了?

为什么呢?

当FlashPlayer里测试的时候收到load("loaddata.asp")这个命令的时候,他会直接读swf文件路径下的loaddata.asp文件。

但由于没有经过IIS的运行处理,直接读入Flash内部,当然,读出的结果就是%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%类似这样了,所以就无法根据我们的意愿来处理数据了,而当FlashPlayer执行load("

当然如果你清楚了路径的关系,也可以把写load("loaddata.asp")写到Flash里,上传的时候,把.asp.swf和包含.swf的html文件,都放在一个目录里就行了。

特别指出的是swf在取得路径时,是取包含他的html和.asp的关系的。

而不是swf与asp的路径关系。

说起来已经是有一点晕了,但如果理解了路径的关系,那就非常简单了。

好了,进入正题,虽然输入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 "
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了,呵呵,下面的慢慢玩吧!

编辑语:

如果在调试的时候,用绝对路径,那么在测试完毕上传前,改为相对路径会更方便整个目录在站点里的移动,也就可以不用上述复杂的方法了。

这个不算我自己发现的技巧,很早在经典论坛 看到水蓝色青蛙给一个网友的回复知道了这个方法,但好像知道的朋友很少,经常有些人问我类似这样的问题,今天把他作为一个实用技巧贡献给大家。

方法主要是在网页中的Flash加入一个参数,让网页设定Flash文件背景透明,Flash文件本身做不到

这里以Dreamwaver为例,点击Flash文件,,然后点击“参数”按钮,弹出参数设定窗口,增加一个参数

这样,在HTML页面中Flash文件便可以透明了,看看效果图

这个技巧主要感谢水蓝色青蛙,我仅仅是传播,呵呵~

类似的东东:

  这是有关让SWF文件在Windows下打开时的窗体透明软件。

这个技巧来源于一个国外的实例,很实用,大家可以看看先

 

在线演示

这个技巧非常适合一些无极扩展菜单之类的特效,可以脱离HTML大小的限制,任意增加菜单的长度,下面就以蛋蛋的Flash+XML无极扩展菜单为例子,如何动态设定FLASH文件在Html页面中的大小

最终效果演示:

 

首先我们来分析一下这个XML菜单的代码:

//建立顶级菜单

function creatRootMenu() {

    _root.creatMyMenu(menuData.firstChild);

}

这个函数主要是调用了creatMyMenu()函数,搜索整个代码,找到creatMyMenu()函数

//建立子菜单

function creatMyMenu(a, b) {

    for (var i = 0; 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()函数的代码:

--

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;

    }

}

//--> 

这段代码并不难理解,主要是设定ID为menu的对象的CSS中一些属性,既width和height

在HTML页面中,新建两个表格,一个为2行2列,另外一个为单行单列,页边距均为0,插入几幅漂亮的图片,如图:

然后在表格1里面的一个单元格插入一个Flash文件,并且参数设定如下:

最后,在代码中给Flash文件加入这样的属性name="menu" style="width:

1px;height:

1px;

好了,现在就可以测试你的结果了。

这个技巧主要是在于flash参数的传递和JavaScript函数的编写上面,有兴趣的朋友还可以再发挥发挥,看看能不能搞出什么新花样来。

如果你对Flash和JavaScript的通信很感兴趣,这有一篇非常权威的文章:

JavaScript和Flash的通信

[从

FlashMX开始,localconnection对象可以用来在flash之间传送消息.这使得同一HTML中的或者位于两个浏览器窗口中的两个flash影片可以相互发送消息,而不必使用Javascript或者fscommand

详细的看这里:

使用LocalConnection数据通信

还有这样的一些文章:

ColdFusion与FLASH通信轻松入门

如果你仔细读过这篇文章,肯定会想到闪客帝国和闪吧的Flash播放控制器。

呵呵,不错,他们用的就是这个道理制作的,这里有一篇相关的教程,有兴趣可以研究一下。

 

其他一些实用技巧的相关教程

在Flash中的字符串检测:

今天提供给大家下面几个功能,全部是针对String的,想使用的话加到自己脚本里面去就可以了(浅蓝色框内的脚本可以直接拷贝)。

∙ 字符串替换功能。

∙ 删除字符串中的HTML标记。

∙ 邮件地址检测。

∙ 类似PHP的nl2br。

  ××××××××××

  功能:

字符串替换功能。

(可以指定针对前多少位进行替换)

  作者:

senocular

  代码:

String.prototype.replaceS=function(str,rep,chr){

vart=(chr<0)?

this.substr(chr):

this.substr(0,chr);

vars=str.length;

varr=rep.length;

varp=t.indexOf(str);

while(p!

=-1){

t=t.substr(0,p)+rep+t.substr(p+s);

p=t.indexOf(str,p+r);

}

return(chr)?

(chr<0)?

this.substr(0,this.length+chr)+t:

t+this.substr(chr):

t;

}

  用法:

myString="abcdefabc"

trace(myString.replaceS("abc","xx"));//返回xxdefxx

trace(myString.replaceS("abc","xx",3));//返回xxdefabc

  ××××××××××

  功能:

删除字符串中的HTML标记。

  作者:

sonotek

  代码:

string.prototype.stripHTML=function(){

varval=0;

vartmp=this;

varBegin=0;

while((Begin=tmp.indexOf('<',Begin))!

=-1){

if((End=tmp.indexOf('>',Begin))==-1){

break;

}

tmp=tmp.substr(0,Begin)+tmp.substr(End+1,length(tmp));

}

returntmp;

};

  用法:

myString="abcdefabc";

trace(myString.stripHTML());

//abcdefabc

  ××××××××××

  功能:

邮件地址检测。

  作者:

smaug

  代码:

String.prototype.isEmail=function(){

//emailaddresshastohaveatleast5chars

if(this.length<5){

returnfalse;

}

variChars="*|,\":

<>[]{}`';()&$#%";

vareLength=this.length;

for(vari=0;i

if(iChars.indexOf(this.charAt(i))!

=-1){

trace("非法地址:

带有非法字符:

-->"+this.charAt(i)+"<--.");

returnfalse;

}

}

varatIndex=this.lastIndexOf("@");

if(atIndex<1||(atIndex==eLength-1)){

trace("非法地址:

没有找到@符号.");

returnfalse;

}

varpIndex=this.lastIndexOf(".");

if(pIndex<4||(pIndex==eLength-1)){

trace("非法地址:

没有找到.符号.");

returnfalse;

}if(atIndex>pIndex){

this.__error="非法地址:

邮件地址应该像这样:

name@domain.domaintype";

returnfalse;

}

returntrue;

};

  用法:

myString="abcdefabc";

trace(myString.isEmail());

//false

myString="abc@";

trace(myString.isEmail());

//true

  ××××××××××

  功能:

类似PHP的nl2br。

  作者:

tommyX3Ro

  代码:

String.prototype.nl2br=function(){

varl=this.length

vari=-1

varchar

while(++i

char=substring(this,i+1,1);

text+=(char=="\n"||char=="\r")?

"
":

char;

}

returntext;

}

  用法:

myString="abc\rabc";

trace(myString.nl2br());

//abc
abc

//该功能可用在数据处理中

Flash中的Des加密算法和MD5算法:

首先我们来假设一个情况。

  我们要做一个flash,里面存了一段话,只想给知道密码的人看。

通常的做法是检测用户的输入是否等于密码,然后显示。

但是由于Flash是开放结构,所以swf文件可以反汇编然后看到密码,这时候就可以非法的看到要保护的东西了。

  但是如果通过一个不可逆的算法把密码加密,然后存在swf里面。

然后把用户输入的密码也同样加密,然后比对加密以后的字串是否相等就可以了。

因为swf里面保存的密码是不可逆的嘛~~

  不可逆的加密算法有很多种,最流行的就是md系列了,现在的是md5。

md5可以计算认可字串的特征,然后归结到一个32字节长的字串里面,源字串一点点的改动就会造成特称字串巨大的变化。

  据个例子:

  "abc"的md5是900150983cd24fb0d6963f7d28e17f72

  "abb"的md5是ea01e5fd8e4d8832825acdd20eac5104

  为什么说不可逆呢?

  据个例子

  问题:

1000是由什么数字相加而成的呢?

  答案是不知道~

  如果说是两个数字,那么我们可以有1+999或者500+500或者……但是三个、四个、直到n个数字呢?

也就是说我们不可能知道原来的数字是什么,猜中的机会很小。

而md5也是同样的原理,将每个字符的特征值相加再相加,自然就很难猜到原来是什么东西了~

  那么我们有了密码检测了~着时候需要一个可逆的加密算法来处理我们要保存的东西,因为要还原嘛~~这类算法很多,我选择了较流行的des算法

  des函数的定义是这样的

  des("密码","加密文本",模式)

  模式=1的时候,des返回加密后的值

  模式=0的时候,des返回解密后的值

  但是由于des返回的值不一定是通用字符集里面的,所以我就做了一点处理,将des的值转成16进制字串,防止错误的产生。

  道理很明白了,怎么用呢~~首先,我们来创建密码的md5值,使用下面的函数:

/*

E-mail:

tsxy@

Moon.Blue

*/

varhexcase=0;

varb64pad="";

varstrsize=8;

functionmd5(s){returnbinl2hex(core_md5(str2binl(s),s.length*strsize));}

functionb64_md5(s){returnbinl2b64(core_md5(str2binl(s),s.length*strsize));}

functionst

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1