大家都喜歡XML,因?yàn)樗∈,我平時(shí)做東西也盡可能的用XML,因?yàn)閷?shí)在是日后更新修改太方便了,都不用動(dòng)fla源文件。
本XML系列教程將分三部分發(fā)布,到最后一期我們將擁有一個(gè)功能全面,更加友好的XML菜單。本教程這個(gè)第一期涉及到了一些XML的基礎(chǔ)知識(shí)。
這里我們要做的效果是一個(gè)縱向排列的動(dòng)態(tài)XML的菜單,并且當(dāng)鼠標(biāo)滑動(dòng)到菜單上顯示相應(yīng)的縮略圖,這個(gè)我們?cè)诤芏鄶z影作品展示flash網(wǎng)站經(jīng)常見到的。在線展示:http://www.keyframe1.com/tute/xmlMenu/
第一步, 分析項(xiàng)目:
組成部分: - XML文件; - FLASH源文件; - 縮略圖JPG文件,50px X 50px 存放在 thumb文件夾; 步驟: - 先寫XML文件 (這個(gè)很簡單,我們將不再講怎么寫XML文件); - 在FLASH中建立所需元素; - actionscripting
第二步,開始建立我們需要的一些元素,并把它們擺到大概理想的位置:
- 一個(gè)放所有縮略圖的母影片剪輯,我們叫做container 50px寬,高盡量大些;
- 一個(gè)遮罩影片剪輯,叫做mask 50px X 50 px;
- 一個(gè)外框影片剪輯,只是為了美觀,叫做br,尺寸比mask大一圈就可以了;
- 把這三個(gè)影片剪輯在工作去擺到大概理想的位置,確定它們的X坐標(biāo),Y坐標(biāo)無所謂因?yàn)橄旅嫖覀円肁S來控制它們的Y坐標(biāo)的;
(好了,主時(shí)間工作區(qū)的事情就是這些,現(xiàn)在我們建立一個(gè)代碼的圖層,把剩下所有的工作交給actionscript)
第三步,actionscripting
//先聲明一些變量
var menut:Number = 30; //菜單頂部Y坐標(biāo) var menul:Number = 300; //菜單左側(cè)X坐標(biāo) var home:MovieClip = this; var mlh:Number = 20; //菜單文字行距 var tlh:Number = 60; //縮略圖行距 var speed:Number = 3; //緩動(dòng)速度
//建立XML對(duì)象,提取XML數(shù)據(jù),建立菜單的鼠標(biāo)滑動(dòng)觸發(fā)的縮略圖,遮罩影片剪輯的代碼... 內(nèi)容較多,盡量解釋
var myx:XML = new XML(); myx.ignoreWhite = true; myx.onLoad = function() { var nodes = this.firstChild.childNodes; //提取XML數(shù)據(jù) numMenu = nodes.length; //使用XML的關(guān)鍵,這個(gè)變量自動(dòng)儲(chǔ)存XML數(shù)據(jù)的節(jié)數(shù),這樣日后我們就可以只更新(添加/減少)XML文件 Flash就會(huì)自動(dòng)更新 for(var i=0; i<numMenu; i++) { //建立子影片剪輯載入縮略圖 var holder:MovieClip = container.createEmptyMovieClip("holder" + i, i); //在母影片剪輯里建立相等數(shù)量的字影片剪輯以載入縮略圖 container["holder" + i]._x = 0; //定位 container["holder" + i]._y = tlh * i; container["holder" + i].loadMovie(nodes[i].attributes.thumb); //載入縮略圖 //建立遮罩 container.setMask(mask); //建立菜單 var menu = home.createEmptyMovieClip("menu" + i, i+40); //建立相等數(shù)量的空影片剪輯以存放菜單文字 menu._x = menul; menu._y = menut + (mlh * i); menu.moveTo(menul, menut); menu.createTextField("btxt", 0, 0, 0, 150, 20); //建立動(dòng)態(tài)文本存放文字 menu.btxt.html = true; menu.btxt.wordWrap = true; menu.btxt.text = (nodes[i].attributes.nav); //載入文字 //菜單文字樣式 btntf = new TextFormat(); btntf.color = 0x666666; btntf.font = "verdana"; btntf.leading = 10; btntf.size = 10; menu.btxt.setTextFormat(btntf); //儲(chǔ)存i的值,這一步非常重要 menu.i = i; //菜單鼠標(biāo)滑入,滑出,點(diǎn)擊時(shí)的代碼 menu.onRollOver = function() { var who:Number = this.i; //提取當(dāng)前 i maskdy = menut + (mlh * who) - 15; //遮罩位置根據(jù)當(dāng)前 i,即當(dāng)前菜單按鈕來計(jì)算 containdy = maskdy - (tlh * who); //遮罩中縮略圖的位置根據(jù)在遮罩位置的基礎(chǔ)上再根據(jù)當(dāng)前 i 計(jì)算出來 speed = 3; //當(dāng)鼠標(biāo)滑入菜單是把速度提高 (speed值越小,速度越高,因?yàn)榫弰?dòng)函數(shù)中y的位移根speed是相除關(guān)系,這里我們的設(shè)置將使鼠標(biāo)滑入菜單按鈕時(shí)提高遮罩和縮略圖的緩動(dòng)速度,當(dāng)然隨便您啦,您當(dāng)然也可以相反讓他們變得更慢,完全是個(gè)人喜好 menutf = new TextFormat(); menutf.underline = true; //鼠標(biāo)滑入時(shí)菜單上文字加下劃線 this.btxt.setTextFormat(menutf); } menu.onRollOut = function() { var who:Number = this.i; //提取當(dāng)前 i var offy = Stage.height + 50; maskdy = offy; //當(dāng)鼠標(biāo)滑出菜單時(shí)把遮罩和縮略圖移出舞臺(tái),我們選擇移到舞臺(tái)下方,當(dāng)然您也可以把它們移到上方看不到的地方,或者自己編寫透明度的緩動(dòng)函數(shù)讓它們的透明度緩動(dòng)淡出 containdy = offy - (tlh * who); //同樣縮略圖的緩動(dòng)位置也相對(duì)其當(dāng)前位置相應(yīng)的移出舞臺(tái) speed = 10; //設(shè)置緩動(dòng)速度,使移出時(shí)速度變慢 menutf = new TextFormat(); menutf.underline = false; this.btxt.setTextFormat(menutf); } menu.onRelease = function() { var who:Number = this.i; //提取當(dāng)前 i var link:String = nodes[who].attributes.url; //把XML中url儲(chǔ)存到變量link中 getURL(link, "_blank"); } } }
myx.load("xmlMenu.xml")
//到這里基本上完成了,下面只需要把用到一些緩動(dòng)函數(shù)加上就可以了;
//遮罩影片剪輯的緩動(dòng)函數(shù) mask.onEnterFrame = function() { maskoldy = this._y; this._y += (maskdy - maskoldy) / 7; }
//縮略圖母影片剪輯的緩動(dòng)函數(shù) container.onEnterFrame = function() { containoldy = this._y; this._y += (containdy - containoldy) / 7; }
//縮略圖外框的緩動(dòng)函數(shù) br.onEnterFrame = function() { brdy = maskdy; broldy = this._y; this._y += (brdy - broldy) / 7; }
//初始化遮罩縮略圖位置 maskdy = menut + (mlh * 0) - 15; containdy = maskdy - (tlh * 0);
// 這個(gè)是這里我們用到的XML文件
<?xml version="1.0" encoding="ISO-8859-1"?> <xmeMenu> <menu nav="Volkswagen Phaeton" url="<menu nav="Volkswagen Touareg" url="<menu nav="KeyFrame1 Digital" url="<menu nav="I-Jar Layout" url="<menu nav="CGRN e-Learning" url="<menu nav="Wild Product" url="<menu nav="Chinese Made Easy" url="<menu nav="Jin Shun Jin Da" url="<menu nav="KeyFrame1 Flash beta" url="<menu nav="Volkswagen New Beetle" url="<menu nav="Volkswagen Revamp" url="<menu nav="VW New Beetle Cabriolet" url="<menu nav="KeyFrame1 Flash beta" url="<menu nav="Volkswagen New Beetle" url="<menu nav="Volkswagen Revamp" url="<menu nav="VW New Beetle Cabriolet" url="</xmeMenu>
現(xiàn)在可以試著修改,刪除或者添加我們的XML,你會(huì)發(fā)現(xiàn)我們的swf文件自動(dòng)更新數(shù)據(jù)了。在未來的XML菜單系列教程中,我們會(huì)在這個(gè)教程的基礎(chǔ)上繼續(xù)豐富這個(gè)XML菜單的功能。
源碼下載:kf1_xmlMenu.zip
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2707340-1-1.html
出處:藍(lán)色理想
責(zé)任編輯:blue
上一頁 下一頁 XML動(dòng)態(tài)菜單 [1]
◎進(jìn)入論壇Flash專欄版塊參加討論
|