這個東西功能很簡單,沒有什麼技術含量。只是記錄一下。
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>