最近有些朋友问我用flash做留言版时,如何解决分页问题。刚刚我最近用flash + servlet + javaBean做了一个小型的flash论坛
其中也用到了分页技术,所以在发布出来给大家讨论一下,参考一下。
当然,最主要的是要先在后台程序里实现好分页技术,但这不是我讨论的范围内。比如用ASP,JSP等做出分页向flash输出内容很轻易吧。
我在这里说的是flash如何分析后台程序传过来的数据。假如每次都发送5条或者10条,就非常轻易,但是假如你定义每页是10条的分页的话
那么它可能是要显示1~10条数据。根据留言的条数,第几页而动态产生的
那么下我就开始正式讲解一下在flash里实现的代码(这里假设读书已经有了actionsrcipt的基础)
我在后台程序把同一条内容都累再在一个字符串中,这里我打个例子
例如传递一个id,一个标题title,作者author三种数据,
那么就定义一个allId,AllTitle,allAuthor,
然后循环读取数据库
把所有数据id的累加在allId里,所有的标题累加在AllTitle里,所有的标题累加在allAuthor里
最后把allId,AllTitle,allAuthor传给flash
(累加的时候记得加分割符,例如“#,那么allId="i#2#3#........"等等,分割要注重一点)
接下来的是flash部分了。在这里我是用LoadVar类来接受数据的。
定义一个函数
//这个函数接受三个参数,allId,AllTitle,allAuthor
function showTitle(allId:StringallTitle:String, allUser:String, allAuthor:String)
{
//定义三个数组
var ids:Array = new Array();
var titles:Array = new Array();
var author:Array = new Array();
//根据分割符,把分割出来的数据放在数组里
ids = allId.split("#");
titles = allTitle.split("#");
author= allUser.split("#");
//这里是程序的主要部分,请大家注重看了,用一个for循环
//先是复制出一个影片,然后把数据加进mc里面的变量
for(var i = 0; i < ids.length; i++)
{
//复制mc
var mc:MovieClip = this.attachMovie("titles","titles" + i,10 * i + 100);
mc._x = 40;
mc._y = 220 + i * 35;
//把相关的信息赋给mc的相应变量
mc.titleVar = titles[i];
mc.authorVar = users[i];
//点击标题时,进入内容
buttonEvent(mc, ids[i],);
}
}
//定义按钮事件
function buttonEvent(btn:MovieClip, id:String)
{
btn.menuBtn.onPress = function()
{
loadMovieNum("content.swf?&titleId=" + id ,0);
}
}
//这是显示分页按钮的函数,这个没什么难点,主要是判定的问题
//page,当前页数-- pageCount,总页数 ---count,当强显示条,pager一页显示多少条
function showPage(id:String,count:String,page:String,pageCount:String,pager:Number)
{
//复制出一个MC出来,里面包含上一页,下一页,第一页,最后一页,返回首页这些按钮
if(page != "1" || count * 1 == pager)
{
this.attachMovie("pageMC","pageMC",50);
pageMC._x = 200;
pageMC._y = 465;
}
//第一页
pageMC.oneBtn.onPress = function()
{
//假如是第一页,弹出警告框
if(count * 1 == pager)
{
showAlert("当前页已经是第一页了");
}
else
{
loadMovieNum("title.swf?&&id=" + id,0);
}
}
//上一页
pageMC.upBtn.onPress = function()
{
//假如是第一页时
if(page == "1" && count == pager)
{
showAlert("没有上一页了");
}
else
{
var pageNo:Number = page * 1 - 1;
loadMovieNum("title.swf?&id=" + id + "&pageNo=" + pageNo,0);
}
}
//下一页
pageMC.nextBtn.onPress = function()
{
//当在最后一页时
if(page == pageCount)
{
showAlert("没有下一页了");
}
else
{
var pageNo:Number = page * 1 + 1;
loadMovieNum("title.swf?&id=" + id + "&pageNo=" + pageNo,0);
}
}
//最后一页
pageMC.lastBtn.onPress = function()
{
if(page == pageCount)
{
showAlert("当前页已经是最后一页了");
}
else
{
loadMovieNum("title.swf?&id=" + id + "&pageNo=" + pageCount,0);
}
}
//首页
pageMC.indexBtn.onPress = function()
{
loadMovieNum("index.swf",0);
}
}
//弹出警告框函数,即Alert组件
function showAlert(str:String)
{
Alert.yesLabel = "确定";
Alert.noLabel = "取消";
Alert.show(str, "提示", Alert.YES|Alert.NO);
}
这里是最后一步了,用来加载可以输出allId,AllTitle,allAuthor的后台程序文件
stop();
System.useCodepage = true; //显示中文
var pageNo:String; //第几页
var sendVar:LoadVars = new LoadVars();
var loadVar:LoadVars = new LoadVars();
//假如pageNo为空时,把pageNo始终设为第一页
if(pageNo == null)
{
pageNo = "1";
}
//把页数传递出去,好让后台程序搜索
sendVar.pageNo = pageNo;
sendVar.sendAndLoad("文件名",loadVar,"post");
loadVar.onLoad = function(success:Boolean)
{
if(success)
{
page = loadVar.page; //当前页数
count = loadVar.count; //当前条数,其实这个可以不要,判定改一下就可以
pageCount = loadVar.pageCount; //总页数
showPage(id,count,page,pageCount,10);
showTitle(loadVar.allId,loadVar.allTitle,loadVar.allAuthor);
}
else
{
_root.gotoAndStop("error");
}
}
由于这些写得有点匆忙,所以代码比较多,解释比较少
不过,思路还是蛮清楚的。
就是分解后台传过来的字符串,然后用数组放起来,放在mc里
其他的就是一些判定了
我最近比较忙,两个星期内还不能继续这做个,希望大家有什么问题说了一下
我会尽量回复大家,希望这个对一些朋友有帮助
再过一段时间我也会把我做的那个flash + servlet + javaBean贴出来给大家共享
现在还有点功能待完善