日期:2014-04-23  浏览次数:20965 次

Flash调用外部的XML程序来显示旧事,当旧事达到一定数目时就存在分页的问题,今天细心想了一下,大概可以有两种实现的方法,第一种比较简单,首先获取把XML文件的旧事数目,然后除以每页要显示的条目数,就可以知道一共有多少页,然后通过调用每页旧事来实现分页效果,例如:每页显示10条旧事,XML文件一共有36条旧事,那么应该显示4页,也就是Math.floor(36/10)+1,这样有个问题,假设旧事数目n刚好符合n%10==0的条件,此时页数应该不用加1,我开始忽略了这个问题,在做《天下贰》官方网站时发现上面的旧事条数刚好是10条,所以出现了一个空页面,要做个判断就可以避免这种问题.

如今一步步来实现,首先在场景中新建一个名为news_a的MC,里面包含一个名为dname动态文本框用来显示XML中的数据,OK,用duplicateMovieClip函数复制10个news_a用来显示调用的10条旧事,此时如果页面数大于1,还需求显示“下一页”按钮进行分页加载,同理如果存在上一页,则需求显示“上一页”按钮进行分页加载。给“下一页”按钮命名为nextp,“上一页”按钮为previousp,默认时两个按钮的形状都为不可见。

假设外部文件旧事的XML文件是news.xml,具体程序如下:
var news_xml:XML = new XML();
news_xml.onLoad = function(success:Boolean):Void  {
    if (success) {//加载XML文件成功
        var newsItems:Array = news_xml.firstChild.childNodes;
        (newsItems.length%10 == 0)?(var pages:Number = Math.floor(newsItems.length/10)):(var pages = Math.floor(newsItems.length/10)+1);//判断页数
        if (pages>1 ){
            nextp._visible = true;//如果页面数大于1,显示“下一页”按钮
        }//本文原创,转载请注明出处!(http://www.xiacong.com)
        for (var i:Number = 0; i<10; i++) {//初始形状时加载最新的10条旧事
            news_a.duplicateMovieClip("na"+i, i+1000);
            with(eval("na"+i)){
            _x = 0;
            _y = 0+i*24;
            if(newsItems[i].firstChild.firstChild.nodeValue!=null){
            this.dname.text = newsItems[i].firstChild.firstChild.nodeValue;
            this.id = i;
            this.onRollOver = menuOver;
            this.onRelease = menuRelease;
            this.onRollOut = menuOut;}
        }
        }
    } else {
        news_a.dname.text = "旧事加载失败";
    }
};
news_xml.load("news.xml");//加载外部XML文件的路径上面的代码曾经加载了默认最新的10条旧事,如今来进行分页加载,分别有两个函数:上一页函数previouspages() 和下一页函数nextpages();
上一页和下一页的实现原理是:当点击“下一页”时,利用removeMovieClip()卸载之前显示的全部内容(这为了节约CPU和内存耗费),当点击"上一页"时,也要卸载之前显示的内容,然后利用类似于上面代码的功用将新的旧事条目载入到动态文本框中,函数程序如下:
function nextpages() {
    ++page;
    var newsItems:Array = news_xml.firstChild.childNodes;
    (newsItems.length%10 == 0)?(var pages:Number = Math.floor(newsItems.length/10)):(var pages = Math.floor(newsItems.length/10)+1);//判断页数
    if ((page+1) == pages) {
        nextp._visible = false;
    }
    if (page != 0) {
        previousp._visible =&nbs