首先聲明:本人大菜鳥一個,剛接觸AS3不久,許多理念還沒來得及灌輸,這些case都是從網(wǎng)上down的,但因為解說是英文的,不利我們學習,我就充當一個translater,順便可以讓自己鞏固一下知識。
水平有限,錯誤難免,歡迎大蝦小蝦,大鳥小鳥指正。
下面進入正題:
案例6:通過類來實現(xiàn)一個gallery
說明:一個比較簡單的相冊,通過類來實現(xiàn)。
演示:http://www.live-my-life-with-yuyi.com/as3_cases/gallery_class/
準備工作:打開源文件class_final.fla,點擊屬性里的發(fā)布設置,點擊Actionscript3旁邊的設置,在最下面的classpath里,引入classes_final的文件夾的路徑,然后點擊確定,前期工作就準備完了。
代碼:
唯一的一個類文件:ImageGallery.as
package interactive.gallery { import flash.display.*; import flash.events.*; import fl.transitions.*; import fl.transitions.easing.*; import flash.filters.*; import flash.net.*; public class ImageGallery extends MovieClip { var xml:XML; var xmlList:XMLList; var xmlLoader:URLLoader = new URLLoader(); var container:MovieClip = new MovieClip(); var imageLoader:Loader; var segments:Number; var currentSegment:int; var fullLoader:Loader = new Loader(); var xmlPath:String; var thumbAtt:String; var fullAtt:String public function ImageGallery(path:String,thumb:String, full:String) { section1 } function xmlLoaded(event:Event):void { section2 } function changeThumb(event:MouseEvent):void { section3 } function showPicture(event:MouseEvent):void { section4 } } }
section1代碼:
xmlPath = path; thumbAtt = thumb; fullAtt = full; container.x = 25; container.y = 25; fullLoader.x = 200; fullLoader.y = 25; container.addEventListener(MouseEvent.MOUSE_MOVE, changeThumb); container.addEventListener(MouseEvent.CLICK, showPicture); xmlLoader.load(new URLRequest(xmlPath)); xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); container.filters = [new DropShadowFilter()]; addChild(container); addChild(fullLoader);
這段代碼的功能就是在初始化類時,給一些以后會用到的變量賦值,因為這些變量是全局變量,所以后面的function都能用。 對container添加了監(jiān)聽事件,監(jiān)聽鼠標移動和點擊。 然后載入xml文件,當xml載入完成后,執(zhí)行xmlLoaded函數(shù) 然后對container應用了陰影濾鏡,這個container就是將來我們要載入圖片的mc。 然后將container和fullLaoder放到舞臺上,fullLoader將來會載入大圖。
section2
xml = XML(event.target.data); xmlList = xml.children(); for (var i:int = 0; i < xmlList.length(); i++) { imageLoader = new Loader(); imageLoader.load(new URLRequest(xmlList[i].attribute(thumbAtt))); container.addChild(imageLoader); }
當xml載入完成后就會執(zhí)行這個函數(shù),先是獲取xml對象列表,然后獲取xml的子元素。這個在前面的教程提及過。 遍歷子元素,然后通過Loader載入圖片,并將imageLoader添加到container里。
section3
segments = container.width / container.numChildren; currentSegment = Math.floor(container.mouseX / segments); if (currentSegment <= container.numChildren - 1) { for (var j:int = 0; j < container.numChildren; j++) { container.getChildAt(j).visible = false; } container.getChildAt(currentSegment).visible = true; }
這個函數(shù)是響應鼠標在縮略圖上移動的事件,有一個算法在里面。 將mc的寬除以載入的縮略圖的數(shù)量,得到一個平均數(shù)。 然后將當前鼠標的x位移除以剛剛得到的平均數(shù)就得到了當前鼠標所在的圖片(聽著有點別扭) 然后先將所有container里的child隱藏起來,再顯示當前的圖片。
section4
fullLoader.unload(); fullLoader.load(new URLRequest(xmlList[currentSegment].attribute(fullAtt))); 這個是響應縮略圖點擊事件,當點擊后先去掉先前載入的大圖,然后再去載入縮略圖對應的大圖。 其實也不難,不是嗎?
再拉看一下完整的代碼
package interactive.gallery { import flash.display.*; import flash.events.*; import fl.transitions.*; import fl.transitions.easing.*; import flash.filters.*; import flash.net.*; public class ImageGallery extends MovieClip { var xml:XML; var xmlList:XMLList; var xmlLoader:URLLoader = new URLLoader(); var container:MovieClip = new MovieClip(); var imageLoader:Loader; var segments:Number; var currentSegment:int; var fullLoader:Loader = new Loader(); var xmlPath:String; var thumbAtt:String; var fullAtt:String public function ImageGallery(path:String,thumb:String, full:String) { xmlPath = path; thumbAtt = thumb; fullAtt = full; container.x = 25; container.y = 25; fullLoader.x = 200; fullLoader.y = 25; container.addEventListener(MouseEvent.MOUSE_MOVE, changeThumb); container.addEventListener(MouseEvent.CLICK, showPicture); xmlLoader.load(new URLRequest(xmlPath)); xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); container.filters = [new DropShadowFilter()]; addChild(container); addChild(fullLoader); } function xmlLoaded(event:Event):void { xml = XML(event.target.data); xmlList = xml.children(); for (var i:int = 0; i < xmlList.length(); i++) { imageLoader = new Loader(); imageLoader.load(new URLRequest(xmlList[i].attribute(thumbAtt))); container.addChild(imageLoader); } } function changeThumb(event:MouseEvent):void { segments = container.width / container.numChildren; currentSegment = Math.floor(container.mouseX / segments); if (currentSegment <= container.numChildren - 1) { for (var j:int = 0; j < container.numChildren; j++) { container.getChildAt(j).visible = false; } container.getChildAt(currentSegment).visible = true; } } function showPicture(event:MouseEvent):void { fullLoader.unload(); fullLoader.load(new URLRequest(xmlList[currentSegment].attribute(fullAtt))); } } }
類說完了,接下來就來看看fla里面都是怎么寫的。 這個就簡單多了
import interactive.gallery.ImageGallery; var gallery:ImageGallery = new ImageGallery("data/images.xml","thumb","full"); addChild(gallery);
我不說了,聰明的你一看就明白了。
案例分析到此結束。
源文件下載
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2807809-1-1.html
本文鏈接:http://www.95time.cn/tech/multimedia/2007/5175.asp
出處:藍色理想
責任編輯:moby
◎進入論壇RIA設計與應用版塊參加討論
|