<b>关于FLASH留言板的具体教程</b>[Flash设计]
本文“<b>关于FLASH留言板的具体教程</b>[Flash设计]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
基于网页的留言板,我们已经见得很多,一个完好的留言板包含三个部份:
1. 显示留言的页面(显示朋友们给我的留言)
2. 填写留言的页面 (向后台提交信息)
3. 数据库(用于保存后台信息)
关于若何制作基于网页的留言板,不去多作注释,可以参考相关资料.
就目前而言,FLASH是不可以直接操作象ACCESS, SQL, Mysql 等数据库的,他只能依靠ASP ,PHP ,JSP等其他的语言来实现数据的提交和查询.同时,FLASH还可以和XML对接,实现一些数据的操作.
FLASH和ASP的交互:
无论是ASP,PHP还是JSP等其他语言,原理大都一样,本人对ASP熟习一点,所以以下只讲授FLASH与ASP的春联;
查看FLASH的帮忙文件,可以找到好几种的交互办法,
本人利用最多的还是:
loadVariablesNum(url:String, level:Number, [method:String]) : Void
loadVariablesNum(参数1,参数2,参数3),参数1为变量所处位置的绝对或相对 URL,参数2为一个整数,指定 Flash Player 中接纳这些变量的级别
参数3为发送变量的 HTTP 办法,常用的有"get"和"POST",举荐利用"POST"办法.
例1:新建一个flash文件,拖一个可输入的文本框组件,取实例名为name_txt,再拖入一个按钮组件到场景中,取实例名为send_btn,在第一帧上写
{
if(_root.name_txt.text!="")
{
myname=_root.name_txt.text;
loadVariablesNum("write.asp",0,"POST");
}
}
那么,测试影片后,在文本框中,输入一个不为空的字符后,点击发送按钮后,输入的内容,将被提交到同一个文件夹中的名为"write.asp"中去!
write.asp通过Request.Form("myname")的办法,便可以得到提交过来的数据,这里就简单的实现了 FLASH向ASP提交数据.
接下来看看FLASH若何从ASP读数据:
例2:新建一个flash文件,拖一个动态文本框组件到场景中,取实例名为read_txt,在第一帧上写
_root.read_txt.text=myname;
理论上测试后,read_txt文本框会显示read.asp提交过来的myname中的值,但是有时刻不可以保持及时性,常常得不到数据,相信也有很多朋友
会碰到一样的问题,这里讲两个小本领.
本领一:
首先可以在FLASH初一个变量为 active_old=0; 在ASP中Response.Write("active_new=1")
那么FLASH里可以写上:
_root.onEnterFrame=function()
{
loadVariablesNum("read.asp",0,"POST");
_root.active_old=active_new;
_root.read_txt.text=myname;
if(_root.active_old==1)
{
delete _root["onEnterFrame"];
}
}
此段代码表示,开始FLASH会不断地拜候read.asp,read.asp会把变量active_new传送给FLASH中的_root.active_old,当_root.active_old改变后,
将终止事件.
本领二:
利用loadVariablesNum("read.asp?temp="+random(10000),0,"POST");的方法,在每次拜候时会得到最新的数据,不会再利用缓存中的信息.
关于ASP中的代码若何书写,不再多作注释,重点讲授FLASH若何精确和及时得到数据库里的数据,到达我们盼望的功效.
[备注]
我们常会碰到,中文提交到数据库后,数据显示出来为乱码,主如果由于编码的缘由,只要在ASP中写上 codePage=”936”%>
FLASH和XML的交互
应当来说,用XML和FLASH来交换数据,还是不错的挑选,首先,XML可以按照我们的需求,很清楚地定义其构造,FLASH也可以很简单去注释信息.
例3:
myxml.ignoreWhite=true; //空白忽视
myxml.load(“music.xml”); //加载同目录下的music.xml文件
myxml.onLoad=function(success)
{
if(success)
{
ReadXML();
trace(“加载成功”);
}else
{
trace(“加载失利”);
}
}
以上的代码就可以够检测xml是不是加载到FLASH中去了.
以下是个简单的XML文件
name=”song2” url=”mp3/02.mp3” />
name=”song3” url=”mp3/03.mp3” />
XML加载进来后,我们需求做的是去解析和提取数据,为我们所用.
以上ReadXML()函数就用来读数据.
{
myArray=myxml.firstChild.childNodes; //把myxml的第一个子结点全部的数据以数组的方法给myArray
totalNumber= myArray.length; //
for( i=0; i< totalNumber ; i++ )
{
arr_1= myArray[i].attributes.name;
arr_2=myArray[i].attributes.url;
}
}
目前,我们可以得到的后果是,在数组arr_1中保存了全部歌曲的名字,在数组arr_2中保存了全部歌曲的途径,我们便可以利用loadSound()等办法制作一个自己的播放器了!
XML与ASP
Xml和ASP各有各的上风,xml数据构造很清楚,但是没有ASP机动,并且还可以查询和改正数据库,所以想一想,假如用ASP来动态生成xml,那么我们便可以两全其美了!
这里需求一点ASP知识!
以下一段实现ASP生成指定的XML.
if request.QueryString("Page")<>"" then
Page=Cint(request.QueryString("Page"))
else
Page=1
end if
pgsz=5
%>
DataBaseName="Manage/Message/Message.mdb"
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(DataBaseName)
set rs=server.CreateObject("Adodb.recordset")
rs.open "Select * from Message order by addtime desc",conn,1,1
if not rs.eof then
rs.pagesize=pgsz
Rs.Absolutepage=Page
%>
" Pagecount="" PageSize="" Recordcount="">
i=0
do while not rs.eof and i
%>
" Sex="" Email="" Time="--" Homepage="" Title="" Content="" Reply=""/>
i=i+1
rs.movenext
loop
%>
end if
rs.close
set rs=nothing
Conn.Close
set Conn=Nothing
%>
[备注]
我们常会碰到,XML中假若有中文,将会成乱码,所以只要在flash中写上
System.useCodePage=true,就OK了!
以上只是些底子知识,下面具体讲授留言板的制作和关键:
效果地址:http://www.u-lee.com/bbs.htm
是我的第一个版本的留言板
留言板主要包含以下功效:游戏,留言(提交留言),播放音乐(mp3),管理功效(删除留言)
利用到的技术:AS,ASP,XML, database
需求办理的技术问题:
1.留言内容的分页显示,
2,利用List组件显示歌曲列表,列表利用XML动态更新,
3,利用ScrollPan组件存放留言内容,当有新的留言内容产生时,自动调整位置,最新留言置顶,
4,加载声音文件,若何实现播放完一首歌曲后,自动换到下一首,
5,删除留言自动调整页面.
原理是把全部的数据用ASP提取出来,然后由FLASH来判断,利用split办法,把数据存到数组里去,需求时,再去取,这样有一个弱点,就是利用起来,分页时,会把不需求的数据也调用了进来,不是很科学!
接下来说的是改良后的版本.原理是用ASP动态生成XML,当分页时,点下一页时,持续拜候ASP,重新生成第二页的XML,都由FLASH拜候XML,来加载数据,由ASP拜候数据库,读和写数据.
V2.0 版本中FLASH原文件共有3个,leave.swf 只是个容器,把write.swf和leave.swf 加载到里面去.
write.swf为提交数据,read.swf 为读数据.
leave.swf :
两个按钮 , 一个 查看留言 btn1 一个我要留言.btn2
btn2: _parent.mess.loadMovie("write.swf");
此中还有, 上一页 和下一页 以及一个下拉条
主要代码:
if (ggg == 1) {
mess._y = 28;
} else {
y = xiala.btn._y;
yy = y/dist1;
mess._y = b_2*yy+30;
}
};
write.swf
(图片见word文档)
主要代码:
System.useCodepage = true; //支持中文编码
this_mc._visible = false; // this_mc 为一个填写错误提醒的影片剪辑
this_sex = "先生"; //默许sex为先生
function clean() { // 点撤消按钮时,清空全部数据
this_name.text = "";
this_homepage.text = "";
this_email.text = "";
this_title.text = "";
this_content.text = "";
}
function emailcheck(str) { //检测email填写能否精确,判断能否有@ 和 点
at = false;
dot = false;
for (i=0; i
if (str.charAt(i) == ’@’) {
at = true;
}
if (str.charAt(i) == ’.’) {
dot = true;
}
}
return (at && dot);
}
clean_btn.onRelease = function() {
clean();
};
send_btn.onRelease = function() { //提交按狃代码
if (this_name.text == "") {
this_mc._visible = true;
this_mc.tishi.text = "姓名不能为空!";
} else if (emailcheck(this_email.text) == false) {
this_mc._visible = true;
this_mc.tishi.text = "请精确填写邮件!";
} else if (this_title.text == "") {
this_mc._visible = true;
this_mc.tishi.text = "主题不能为空!";
} else if (this_content.text == "") {
this_mc._visible = true;
this_mc.tishi.text = "内容不能为空!";
} else {
myName = this_name.text;
myHomepage = this_homepage.text;
if (myHomepage == "") {
myHomepage = "http://www.u-lee.com";
}
myEmail = this_email.text;
myTitle = this_title.text;
myContent = this_content.text;
mySex = this_sex;
trace(myName);
trace(myHomepage);
trace(myEmail);
trace(myTitle);
trace(myContent);
trace(mySex);
loadVariablesNum("write.asp", 0, "POST"); // 假如填写的数据全部合格,将提交数据到write.asp
_parent.page_num = 1;
_parent.prev_btn._visible = false;
_parent.txt._visible = true;
_parent.xiala._visible = true;
_parent.next_btn._visible = true;
_parent.btn2.gotoAndStop(1);
_parent.btn1.gotoAndStop(2);
_parent.ggg = 0;
_parent.mess.unloadMovie();
_parent.mess.loadMovie("read.swf"); //提交后,自动转入显示留言的页面
}
};
listenerObject_1 = new Object(); // 侦听事件,假如挑选了"先生"则this_sex = "先生";
listenerObject_1.click = function(eventObject) {
this_sex = "先生";
};
listenerObject_2 = new Object();
listenerObject_2.click = function(eventObject) { // 侦听事件,假如挑选了"先生"则this_sex = "女士";
this_sex = "女士";
};
sex_1.addEventListener("click", listenerObject_1);
sex_2.addEventListener("click", listenerObject_2);
stop();
read.swf
以上是一个空影片剪接,用于安排留言信息, 想想假定我想每页显示5个,那么 我需求复制5个这样的影片,放到场景中, 再把从xml中的提取出来的数据注入到每个影片中的 1-5个 动态文本框中去.
若何读数据,上面已经讲过了, 目前 只要把数据赋给动态文本框中便可以了. 需求注意的是,我们选用的是自定义的文本框,首先确保他是多行的并且是自动换行的,所以我们考虑的是,文本框的高度必须按照内容的多少来显示.以下代码便可以实现:
scroll_1 = this.message_load_mc["message_mc"+i].content_txt.maxscroll; //获得内容的最大转动量
this.message_load_mc["message_mc"+i].content_txt._height = scroll_1*18;
//一行文本,假如是12号字大约是18px,那么*18后,便可以得到content_txt._height 了
答复一样也是这样别的,低色的高度也要按照上面内容来肯定.
this.message_load_mc["message_mc"+i].back_2._y= this.message_load_mc["message_mc"+i].back_1._y+this.message_load_mc["message_mc"+i].back_1._height+2
//得到back_2._y 坐标.
完好的代码:
stop();
System.useCodepage = true;
//目前是第几页,由_root里的this_nowpage来传给它,在场景中定义
this_nowpage = _parent.page_num;
temp = 0;
read_xml = new XML();
read_xml.ignoreWhite = true;
read_xml.load("DataSource.asp?Page="+this_nowpage+"&"+Math.random(10000));
// 革新DataSource.asp,保证不利用缓存里的数据
read_xml.onLoad = function(success) {
if (success) {
trace("OK");
parseXML();
} else {
trace("加载失利");
}
};
function parseXML() {
name_arr = new Array();
sex_arr = new Array();
email_arr = new Array();
time_arr = new Array();
homepage_arr = new Array();
title_arr = new Array();
content_arr = new Array();
reply_arr = new Array();
total_arr = new Array();
total_arr = read_xml.firstChild.firstChild.childNodes;
//---------总记录数-------
totalRecord = read_xml.firstChild.firstChild.attributes.Recordcount;
//---------总页数---------
totalPage = read_xml.firstChild.firstChild.attributes.Pagecount;
_parent.total_1 = totalPage;
//---------当前页数--------
now_Page = read_xml.firstChild.firstChild.attributes.CurPage;
//---------每页显示记录数-------
page_size = read_xml.firstChild.firstChild.attributes.PageSize;
trace(totalRecord);
trace(totalPage);
trace(now_Page);
for (i=0; i
name_arr[i] = total_arr[i].attributes.Name;
sex_arr[i] = total_arr[i].attributes.Sex;
email_arr[i] = total_arr[i].attributes.Email;
time_arr[i] = total_arr[i].attributes.Time;
homepage_arr[i] = total_arr[i].attributes.Homepage;
title_arr[i] = total_arr[i].attributes.Title;
content_arr[i] = total_arr[i].attributes.Content;
reply_arr[i] = total_arr[i].attributes.Reply;
}
showmessage();
}
function showmessage() {
_parent.txt._visible = true;
_parent.txt.total_txt.text = "一共有"+totalRecord+"记录";
_parent.txt.nowpage_txt.text = this_nowpage+"/"+totalPage;
for (i=0; i
this.message_load_mc.attachMovie("message_mc", "message_mc"+i, i);
this.message_load_mc["message_mc"+i].name_txt.text = name_arr[i]+"("+sex_arr[i]+")";
this.message_load_mc["message_mc"+i].title_txt.text = title_arr[i];
this.message_load_mc["message_mc"+i].content_txt.text = content_arr[i];
this.message_load_mc["message_mc"+i].reply_txt.text = reply_arr[i];
trace(this.message_load_mc["message_mc"+i].reply_txt.text);
this.message_load_mc["message_mc"+i].time_txt.text = time_arr[0];
this.message_load_mc["message_mc"+i].back_2._y = this.message_load_mc["message_mc"+i].back_1._y+this.message_load_mc["message_mc"+i].back_1._height+2;
scroll_1 = this.message_load_mc["message_mc"+i].content_txt.maxscroll;
this.message_load_mc["message_mc"+i].content_txt._height = scroll_1*18;
this.message_load_mc["message_mc"+i].back_2._height = this.message_load_mc["message_mc"+i].content_txt._height+15;
scroll_2 = this.message_load_mc["message_mc"+i].reply_txt.maxscroll;
this.message_load_mc["message_mc"+i].reply_txt._height = scroll_2*18;
if (this.message_load_mc["message_mc"+i].reply_txt.text == "") {
this.message_load_mc["message_mc"+i].back_3._height = 30;
} else {
this.message_load_mc["message_mc"+i].back_3._height= this.message_load_mc["message_mc"+i].reply_txt._height+10;
}
this.message_load_mc["message_mc"+i].back_3._y= this.message_load_mc["message_mc"+i].back_2._y+this.message_load_mc["message_mc"+i].back_2._height+2;
this.message_load_mc["message_mc"+i].txt_1._y= this.message_load_mc["message_mc"+i].back_3._y+5;
this.message_load_mc["message_mc"+i].reply_txt._y= this.message_load_mc["message_mc"+i].txt_1._y;
this.message_load_mc["message_mc"+i]._x = 0;
this.message_load_mc["message_mc"+i]._y = temp;
temp = temp+this.message_load_mc["message_mc"+i]._height+15;
this.message_load_mc["message_mc"+i].btn1.onRelease = function() {
homepage_num = Number(this._parent._name.slice(10));
str_1 = homepage_arr[homepage_num];
getURL(str_1, "_blank");
};
this.message_load_mc["message_mc"+i].btn2.onRelease = function() {
email_num = Number(this._parent._name.slice(10));
str_2 = email_arr[email_num];
getURL("mailt"+str_2);
trace(str_2);
};
}
trace("++++++++++++++++"+this._height);
_parent.b_2 = -1*this._height+250;
}
以上的全部的操作,测试时需求在ASP环境下.
以上假若有不的当的术语,请谅解!
感激您阅读我的心得!谢谢!
可以把“FLASH留言板原文件” 中的内容全拷到ASP环境下
如 http://127.0.0.1/web/index.html 便可以了
文件夹中供应了后台管理系统供大家学习和测试flash.rar
以上是“<b>关于FLASH留言板的具体教程</b>[Flash设计]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |