以上只是些基础知识,下面具体讲解留言板的制作和关键:
flash.rar
效果地址: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
- btn1: _parent.mess.loadMovie("read.swf");
- btn2: _parent.mess.loadMovie("write.swf");
复制代码
其中还有, 上一页 和下一页 以及一个下拉条
主要代码:
- xiala.onEnterFrame = function() { //下拉的位置,控制着留言内容mess的位置
- 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("mailto:"+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 就可以了
文件夹中提供了后台管理系统供大家学习和测试 |