Flash中调用XML程序实现分页效果

xml|程序|分页

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 = true;
    }//本文原创,转载请注明出处!(http://www.xiacong.com)
    for (p=0; p<10; p++) {
        removeMovieClip("na"+((page-1)*10+p));
        trace("na"+((page-1)*10+p));
        news_a.duplicateMovieClip("na"+((page*10)+p), (page*10)+p+1000);
        eval("na"+((page*10)+p))._x = 0;
        eval("na"+((page*10)+p))._y = 0+p*24;
        if(newsItems[(page*10)+p].firstChild.firstChild.nodeValue!=null){
        eval("na"+((page*10)+p)).dname.text = newsItems[(page*10)+p].firstChild.firstChild.nodeValue;
        eval("na"+((page*10)+p)).id = (page*10)+p;
        eval("na"+((page*10)+p)).onRollOver = menuOver;
        eval("na"+((page*10)+p)).onRelease = menuRelease;
        eval("na"+((page*10)+p)).onRollOut = menuOut;}
    }
}function previouspages() {
    --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 == 0) {
        previousp._visible = false;
    }
    if ((page+1) != pages) {
        nextp._visible = true;
    }//本文原创,转载请注明出处!(http://www.xiacong.com)
    for (p=0; p<10; p++) {
        removeMovieClip("na"+((page+1)*10+p));
        trace("na"+((page+1)*10+p));
        news_a.duplicateMovieClip("na"+((page*10)+p), (page*10)+p+1000);
        eval("na"+((page*10)+p))._x = 0;
        eval("na"+((page*10)+p))._y = 0+p*24;
        eval("na"+((page*10)+p)).dname.text = newsItems[(page*10)+p].firstChild.firstChild.nodeValue;
        eval("na"+((page*10)+p)).id = (page*10)+p;
        eval("na"+((page*10)+p)).onRollOver = menuOver;
        eval("na"+((page*10)+p)).onRelease = menuRelease;
        eval("na"+((page*10)+p)).onRollOut = menuOut;
    }
}OK,分页全部实现!上面代码中的menuRelease;menuOver;menuOut表示了鼠标的动作,呵呵~当鼠标放上去时显示不同的颜色,点击时链接到详细新闻页面~~
function menuOver() {
    eval("na"+this.id).dname.textColor = "0xffffff";
}
function menuOut() {
    eval("na"+this.id).dname.textColor = "0xFDE5B9";
}
function menuRelease() {
    var url_link = news_xml.firstChild.childNodes[this.id].childNodes[1].firstChild.nodeValue;
    if (url_link != null) {
        getURL("javascript:void(open_window(\’"+url_link+"\’))");
    }
}终于大功告成,大家可以测试一下,我尽量用容易理解的思维方式和程序实现了分页效果,这也是网易《天下贰》内测官方网站Flash加载外部XML实现新闻的源代码,呵呵~
另外还想了一种方法,因为每页加载固定量的新闻条目,比如10条,那么第一页就是显示1-10,第二页显示11-20,如此类推,可以用页面的变量p*10+(0-10)来加载,1、11、21、31……这些都是放在同一区域,所以比较容易实现,有兴趣的可以试试~~呵呵

时间: 2024-10-28 09:52:40

Flash中调用XML程序实现分页效果的相关文章

在Flash中调用Html的层

本教程需要大家有一些关于HTML, CSS, Flash, JavaScript 和ASP的基础知识     用Html文本与Flash一起来制作动画是一个很好的方式. 它非常的简单, 而且容易上手,只需要使用ActionScript中的getURL()脚本就可以了,比你能想象到的任何其他编成语言(例如JavaScript)都更方便,功能也更强大.     请看下面这个情节: 在一个特殊工程中,设计师需要Flash 动画运行于页面的顶端,然后在Flash播放后,再显示文本.你可以在Flash中做

Flash中调用外部文本文件的两种方法

方法一:利用上下滚动按钮 1.打开文本文件,将文本复制到Windows 2000自带的程序"记事本"中,并在文本内容的前面输入"t="("t"为我们定义的一个变量),然后保存为"m.txt"文件,保存位置为"我的文档",编码设为"UTF-8"或"Unicode". 2.运行Flash MX,以"也谈在Flash中调用外部文本文件"为名,保存在&qu

SQL点滴15—在SQL Server 2008中调用C#程序

原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可以在SQL Server 2008中扩展C#程序来完成循环等过程式的查询,或者其他SQL不便实现的功能.这个随笔中将介绍在SQL Server中扩展C#程序实现正则表达式的替换功能. 新建一个类库程序命名为Regex,打开Visual Studio 2008,点击File,点击New,点击Proje

labview+matlab-在Labview中调用Matlab程序时出错,错误提示Function函数无效

问题描述 在Labview中调用Matlab程序时出错,错误提示Function函数无效 请大神们帮帮忙,这个问题怎么解决啊? 解决方案 http://wenku.baidu.com/link?url=c_f-NBJBOaw_RveWarfinIctyj5GYUQlJagTkpE_eed4JkesENfgIO9JMUYs6uU9bW8onhml7JJ5eO2V80LcmS0GsnYdNwYGEzeUgACOguu

sql server-如何在SQL Server 数据库中调用JAVA程序

问题描述 如何在SQL Server 数据库中调用JAVA程序 工作中 遇到一个实际的问题如下: 一个在线的SQL server数据库A,他的一个触发器在数据库有更新时把新的数据插入的到另一个SQL server 数据库B,已经写好的一个JAVA程序可以把B中的数据全部复制到一个Oracle 数据库C中,并且立即把数据库B中的数据清空.现在希望这个程序能够自动执行,就是JAVA程序能够在检测到B中有新数据后立即开始自动执行.我已经知道对于Oracle数据库可以通过触发器直接调用JAVA程序,可是

设置-如何在.Cpp程序中调用.c程序中的函数?

问题描述 如何在.Cpp程序中调用.c程序中的函数? 我在软件中需要把mp3文件转换成wav文件.为此从网上下载了一个转换程序.但把这些转换程序的文件加入到我的用VC6.0编写的MFC工程中后却发现编译通不过.为此,我把Project Settings中这些文件对应的Precompiled Headers都设置成Not using precompiled headers.这样,编译能通过了.但连接却通不过.我的具体程序和现象如下: 我在我的一个.cpp文件中需要调用如下函数: BOOL mp3T

.bat中调用java程序,且得到java的输出(system.out.println)内容

问题描述 如题:在.bat中调用java程序,且得到java的输出(system.out.println)内容.我要在bat中执行"java-jarxxx.jar"并且用一个变量保存jar运行后的输出结果,jar中要么输出(system.out.println)0要么输出1,并且对结果进行判断如果变量值为0(注:变量的值是由jar运行产生的)则使用exit/B0退出,如果变量值1则使用exit/B1退出linux版的.sh代码如下:var=`java-jarxxxxx.jar${use

javascript- 不使用ActiveXObject,在js中调用exe程序,求帮忙

问题描述 不使用ActiveXObject,在js中调用exe程序,求帮忙 因为使用new ActiveXObject("wscript.shell"); 需要使用IE插件 解决方案 如果是windows操作系统,可以使用协议扩展 http://zhidao.baidu.com/link?url=A4QX1crr32EbPtuCtLLSnvf_oi_lxL8aAeUqjWaA_jcH8BqEBUXEVPdPEMaI_O-RUpeskn-onCwkW7IMrX0GRuFPodxWAR1l

FLASH中实现眨眼睛的动画效果

许多FLASH动画短片和MV中经常有精美生动的动画人物出现,配合眨眼动作.口形变化以及头发的飘动,再加上人物的配音,一个活脱脱的动画人物形象就出现在FLASH动画中了.很多人都想知道这样的人物是如何做得栩栩如生的,尤其是其中的简单动画效果,如眨眼的动作,如何制作人物的眨眼动画呢?其实技巧很简单,甚至都不需要专门教程来指导,但是对于初学者,笔者认为却是应该用一个实例教程来给予指导的.最近发现帝国的在线教程中也有很多这样的提问--"在FLASH中如何制作效果逼真的人物眨眼效果?",其他的F