每天學一點flash(63) 讀取xml後的簡單分頁處理

來源:互聯網
上載者:User

 這個東西功能很簡單,沒有什麼技術含量。只是記錄一下。

 xml 的資料擷取後,可以通過一個簡單分頁處理來完成簡單分頁效果。

 

1.利用求餘和除法的方法判斷頁數

  這個是一個比較常見的做法,也是一種辦法。在這裡,不對這種分頁處理要達到什麼最佳化的效果進行討論,這裡只是探討一種辦法。對一些資料量不大的做法,可以嘗試一下這些。然而對於過大的資料量,則需要其他辦法處理。我對資料庫並不熟悉,甚至可以說早已經遺忘了很多。不過,利用現在的資源處理一下這些還算可以。

 

  假設,xml 有50條的資訊,我們每一頁只是顯示10條,則50/10=5;計算出5頁。

  假設,xml 有51條資訊,我們需要進行分頁,每一頁顯示10條,則51/10=5.....1(餘1) 則我們需要分頁數為5+1=6頁。

 

 可以假設推導,當除盡的時候,容易計算出頁數,當不能計算出,我們則通過求餘的方式來判斷是否求可以整除。 (頁數%2==0).

 

 

 下面就是一個思路。

 

    if(總頁數%2==0)

   {

        分頁數=總頁數/每一頁的條數

   }

 

   else

 {

     分頁數=總頁數/每一頁的條數+1;

 }

 

有了這個辦法之後,我們寫一個簡單類實現這個功能。

package com.web<br />{<br /> //分頁類<br />public class Page<br />{<br />private var max:int;<br />private var pagenum:int;<br />private var currentPages:int;<br />public function Page()<br />{</p><p>}<br />//設定分頁項數<br />public function set MaxRow(max:int):void<br />{<br />this.max=max;<br />}<br />//擷取分頁項數<br />public function get MaxRow():int<br />{<br />return max;<br />}</p><p>public function set currentPage(value:int):void<br />{</p><p>this.currentPages=value;<br />}</p><p>public function get currentPage():int<br />{<br />return currentPages;</p><p>}</p><p>//擷取總的分頁數,利用求餘的方式判斷是不是整頁<br />public function getPageNumber(total:int):int<br />{<br />if (total%MaxRow==0)<br />{<br />pagenum=total/MaxRow;<br />} else<br />{<br />pagenum=int(total/MaxRow)+1;<br />}<br />return pagenum;<br />}</p><p>public function get TotalPage():int<br />{<br />return pagenum;<br />}</p><p>//顯示頁碼<br />public function getPage():String<br />{<br />var str:String=(currentPage+1)+"/"+TotalPage;<br />return str;<br />}</p><p>}<br />}

 

 

2.接下來,我們還需要對其進行分頁處理。

 

 

3擴充文本,為了實現了一個提示的作用,因此為文本擴充一個字串

package com.web<br />{</p><p>import flash.text.*;<br /> //擴充文本<br />public class TextFieldEx extends TextField<br />{<br />public var toopTip:String;<br />public function TextFieldEx()<br />{</p><p>}<br />}<br />}

 

 

4 總的文檔類。

 

 

 

 

 

package<br />{</p><p>import flash.display.MovieClip;<br />import flash.display.Sprite;<br />import flash.events.*;<br />import flash.text.*;</p><p>import flash.net.URLLoader;<br />import flash.net.URLRequest;<br />import flash.net.navigateToURL;<br />import com.web.Page;<br />import com.web.TextFieldEx;<br />public class Main extends MovieClip<br />{<br />private var list:Array=new Array();<br />private var url:Array=new Array();//超連結資料<br />private var description:Array=new Array();//新聞的簡短描述<br />private var count:int=0;//點擊次數的計算機<br />private var temp:int=0;<br />private var total:int;<br />private var contain:Sprite=new Sprite();<br />private var page:Page=new Page();//分頁類<br />private var toolcontain:Sprite=new Sprite();<br />public function Main()<br />{<br />init();<br />}<br />private function init():void<br />{<br />page.MaxRow=10;//設定最大的頁數<br />var loader:URLLoader=new URLLoader();<br />loader.addEventListener(Event.COMPLETE,completeHandler);<br />loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHandler);<br />loader.load(new URLRequest("http://www.people.com.cn/rss/politics.xml"));<br />Btn_Preview.addEventListener(MouseEvent.CLICK,onPreview);<br />Btn_Next.addEventListener(MouseEvent.CLICK,onNext);<br />Btn_Preview.buttonMode =true;<br />Btn_Next.buttonMode =true;<br />addChild(contain);<br />addChild(toolcontain);<br /> page.currentPage=count;<br />}<br />private function onPreview(event:MouseEvent):void<br />{<br />if (count!=0)<br />{<br />count--;<br />page.currentPage=count;<br />showTitle();<br />}<br />}<br />private function onNext(event:MouseEvent):void<br />{<br />if (count<total-1)<br />{<br />count++;<br />page.currentPage=count;<br />showTitle();<br />}<br />}<br />private function completeHandler(event:Event):void<br />{<br />var xml:XML=XML(event.target.data);<br />read(xml);<br />total=page.getPageNumber(list.length);//進行分頁處理<br />showTitle();//顯示新聞標題<br />}</p><p>private function ErrorHandler(event:IOErrorEvent):void<br />{<br />throw new Error("路徑或者xml錯誤");<br />}</p><p>//讀取遠端xml資料<br />private function read(xml:XML):void<br />{<br />for each (var node:XML in xml..item)<br />{<br />list.push(node.title);<br />url.push(node.link);<br />description.push(node.description);<br />}<br />}</p><p>//輸出新聞標題<br />private function showTitle():void<br />{<br />clearAll(contain);<br />var k:int=0;<br />temp=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);<br />for (var i:int=page.MaxRow*count; i<temp; i++)<br />{<br />var txt:TextFieldEx=new TextFieldEx();<br />contain.addChild(txt);<br />txt.x=30;<br />txt.width=500;<br />txt.height=23;<br />txt.y=txt.height*k+10;<br />txt.border=true;<br />txt.toopTip=description[i];<br />txt.htmlText="<a href=""+url[i]+"" mce_href=""+url[i]+"">"+list[i]+"</a>";//進行超連結<br />txt.addEventListener(MouseEvent.ROLL_OVER,onRoll);<br />txt.addEventListener(MouseEvent.ROLL_OUT,onRoll);<br />txt.selectable=false;<br />txt.addEventListener(TextEvent.LINK,onLink);<br />k++;<br />}<br />pageMsg.text=page.getPage();;<br />}</p><p> //進行超連結<br /> private function onLink(event:TextEvent):void<br />{<br />navigateToURL(new URLRequest(event.text));<br />//navigateToURL(new URLRequest(event.currentTarget.URL));<br />}</p><p>private function onRoll(event:MouseEvent):void<br />{<br />switch(event.type)<br />{<br />case MouseEvent.ROLL_OVER:<br /> event.currentTarget.textColor=0xff0000;<br /> ShowtoolTip( event.currentTarget.toopTip);<br />break;</p><p>case MouseEvent.ROLL_OUT:<br /> event.currentTarget.textColor=0x000000;<br /> clearAll(toolcontain);<br />break;</p><p>}<br />}</p><p>//進行提示<br />private function ShowtoolTip(msg:String):void<br />{<br />clearAll(toolcontain);<br />var tool:TextField=new TextField();<br />toolcontain.addChild(tool);<br />tool.text=msg;<br />tool.wordWrap=true;<br />tool.width=300;<br />tool.background=true;<br />tool.backgroundColor=0xCCCCCC;<br />tool.autoSize=TextFieldAutoSize.LEFT;<br />tool.x=mouseX+20;<br />tool.y=mouseY;<br />}</p><p>//利用求餘辦法來求出分頁的總頁數<br />private function clearAll(contain:Sprite):void<br />{<br />while (contain.numChildren>0)<br />{<br />contain.removeChildAt(0);<br />}<br />}<br />}<br />}

 

 

 

 

 

 

 

 

 擷取XML資料來源

 

現在開始,我們看看是怎樣擷取到xml的資源?這次我們使用的xml 並不是在本地裡面進行,而是通過外部網路的rss提供的xml 資料進行解析

 

var loader:URLLoader=new URLLoader();<br />loader.addEventListener(Event.COMPLETE,completeHandler);<br />loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHandler);<br />loader.load(new URLRequest("http://www.people.com.cn/rss/politics.xml"));

讀取完成xml後,我們對一些資料進行儲存,使用數組進行對xml 的標題,串連地址。描述進行處理。

 

 

顯示資料一種處理方法

儲存了這些後,現在開始我們就通過互動性的操作讓xml 看起來就像分頁一樣。

每一次,我們讀取的資料是限定的,假設我設定每一頁最多顯示的資料為10,那麼通過計算出分頁碼,每次通過迴圈的顯示出數組裡面的內容

 

 0---10

11---21

22---32

33---43

 

這樣的方式進行處理;

關鍵一個地方處理輸出的條件。開始--限制輸出的條數判斷

  temp=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);
   for (var i:int=page.MaxRow*count; i<temp; i++)

 

 private function showTitle():void<br />{<br />clearAll(contain);<br />var k:int=0;<br />temp=page.MaxRow*(count+1)>list.length ? list.length :page.MaxRow*(count+1);<br />for (var i:int=page.MaxRow*count; i<temp; i++)<br />{<br />var txt:TextFieldEx=new TextFieldEx();<br />contain.addChild(txt);<br />txt.x=30;<br />txt.width=500;<br />txt.height=23;<br />txt.y=txt.height*k+10;<br />txt.border=true;<br />txt.toopTip=description[i];<br />txt.htmlText="<a href=""+url[i]+"" mce_href=""+url[i]+"">"+list[i]+"</a>";//進行超連結<br />txt.addEventListener(MouseEvent.ROLL_OVER,onRoll);<br />txt.addEventListener(MouseEvent.ROLL_OUT,onRoll);<br />txt.selectable=false;<br />txt.addEventListener(TextEvent.LINK,onLink);<br />k++;<br />}<br />pageMsg.text=page.getPage();;<br />}

 

 

滑鼠互動性:翻頁

 弄好了這個,我們討論滑鼠的互動性,當我們點擊了按鈕後,我們希望進行分頁的效果。在這裡筆者想到一個點擊數的計算辦法

通過人的點擊數來計算出顯示出那一頁。

private function onPreview(event:MouseEvent):void<br />{<br />if (count!=0)<br />{<br />count--;<br />page.currentPage=count;<br />showTitle();<br />}<br />}<br />private function onNext(event:MouseEvent):void<br />{<br />if (count<total-1)<br />{<br />count++;<br />page.currentPage=count;<br />showTitle();<br />}<br />}

 

count 變數為 滑鼠點擊計數器,初始化0;當點擊了那麼就會變成1.

 

點擊是數需要進行一定的限制,不能超過總的分頁數total(為分頁後的數)

 

 

顯示頁碼

通過滑鼠互動,就能顯示出不同的頁數了。最後就是顯示頁碼了

 

//顯示頁碼<br />public function getPage():String<br />{<br />var str:String=(currentPage+1)+"/"+TotalPage;<br />return str;<br />}

 

 

 

 不足地方依舊很大,只能算一個簡單demo 效果了。

 

引發的問題:

由於swf 並不是所有檔案都允許載入進來。因此對外部的xml 檔案,要是沒有crossdomain.xml檔案的支援,那麼就會進行出錯

例如:讀取新浪的RSSxml檔案。

http://blog.sina.com.cn/crossdomain.xml

 

可以發現,所以開啟swf 讀取外部的rss的xml檔案,所以對比一下使用這個檔案。檢查一下對方是否有crossdomain.xml的檔案。

只有伺服器允許了,這樣我們開啟swf 就可以載入到外部的檔案了而不發生異常。

 

<?xml version="1.0" encoding="UTF-8" ?><br />- <cross-domain-policy><br /> <allow-access-from domain="blog.sina.com.cn" /><br /> <allow-access-from domain="control.blog.sina.com.cn" /><br /> <allow-access-from domain="sjs.sinajs.cn" /><br /> <allow-access-from domain="simg.sinajs.cn" /><br /> <allow-access-from domain="icp.api.sina.com.cn" /><br /> <allow-access-from domain="icp.api.cws.sina.com.cn" /><br /> <allow-access-from domain="api.blog.sina.com.cn" /><br /> <allow-access-from domain="blog.2008.sina.com.cn" /><br /> <allow-access-from domain="blogimg.sinajs.cn" /><br /> <allow-access-from domain="blogjs.sinajs.cn" /><br /> <allow-access-from domain="blogold.sinajs.cn" /><br /> <allow-access-from domain="blog.photo.sina.com.cn" /><br /> <allow-access-from domain="photo.sina.com.cn" /><br /> <allow-access-from domain="blog.sports.sina.com.cn" /><br /> <allow-access-from domain="circle.blog.sina.com.cn" /><br /> <allow-access-from domain="photo.blog.sina.com.cn" /><br /> <allow-access-from domain="widget.say-on.com" /><br /> <allow-access-from domain="edu.photo.sina.com.cn" /><br /> <allow-access-from domain="baby.photo.sina.com.cn" /><br /> </cross-domain-policy>

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.