全力打造超级可扩展Menubar |
| 作者:佚名 来源:闪吧 更新:2007-1-13 20:49:00 错误报告 我要投稿 |
我们都知道,flashmx2004里的menubar组件是不错,但是似乎用起来不是太方便,因为我们应用了他的内置选项之后,要是我们再想更改,只能是把原文件再发布一遍了,这的确是不够方便,那么导入外置xml对网站制作来说似乎是以给不错的选择,但是看了网上的一些实例之后,总感觉对于功能的实现描述得不够详细,在此,笔者略有心得,在此分享一下。 其实,对于外置的xml来说,在用户选择了相应选项之后,就应实现相应的功能,但总的来说,实现的功能不过如下:1、getURL一个新页面2、载入文字3、载入swf4、特殊功能如进行信息的传递和交互5、信息框6、保留功能(可供今后无极扩展生机!)(先别偷着乐,我们看一下如何实现的吧。 1.先启动flashmx2004(这不是废话么?) 2.拖入一个menubar和一个XMLconnector如图命名 3.如图写一个xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <menu> <menuitem label="新页面" > <menuitem label="MyFS2004" instanceName="http://www.myfs2004.9126.com" groupName="url"/> <menuitem label="MyFSasp" instanceName="http://www.myfsasp.9126.com" groupName="url"/> </menuitem> <menuitem label="html" > <menuitem label="欢迎" groupName="html" instanceName="1.htm"/> </menuitem> <menuitem label="swf" > <menuitem label="1"> <menuitem label="sm" groupName="loadswf" instanceName="sm.swf" /> </menuitem> <menuitem label="2"> <menuitem label="rm" groupName="loadswf" instanceName="rm.swf" /> </menuitem> </menuitem> <menuitem label="frame" > <menuitem label="1" rtype="radio" instanceName="25" groupName="frame"/> <menuitem label="2" type="radio" instanceName="30" groupName="frame"/> <menuitem label="3" type="radio" instanceName="35" groupName="frame"/> </menuitem> <menuitem label="关于" > <menuitem label="网站" instanceName="MyFS" groupName="alert"/> <menuitem label="版权" instanceName="copyright(c)watanuo@MyFS" groupName="alert"/> </menuitem> </menu>
4.导入xml,绑定xmlconnector+menubar
5.如图写监听在第一桢(此处最为重要,因为所有的功能都通过它来实现的,当然您可以尽情的发挥您的想象来写入各种变态的功能,包括保留的功能啊!)action层第一桢的as
// ----- Listener ----- var menuListener = new Object();
// ----- Change listener ----- menuListener.change = function(evt) { var menu = evt.menu; var menubar = evt.menubar; var item = evt.menuItem; var group = evt.groupName; if (item != undefined) { switch (item.attributes.groupName) { case "url" : getURL(item.attributes.instanceName, _blank); break; case "html" : trace("html") _root.gotoAndPlay("loadhtmlframe"); loadhtml(item.attributes.instanceName) break; case "loadswf" : _root.gotoAndPlay("loadswfframe"); _root.loadMC.loadMovie(item.attributes.instanceName) _root.loadMC._x=3 _root.loadMC._y=25 break; case "frame" : _root.gotoAndPlay(item.attributes.instanceName); break; case "alert" : msg(item.attributes.instanceName); break; } } } menu.addEventListener("change",menuListener);
// ----- Installation listener ----- // There is no change event on MenuBar. // The change listener must be set on the differents menus. menuListener.focusIn = function(evt) { if (this.initChange == undefined) { this.initChange = true; var menuObj = evt.target; var length = menuObj.dataProvider.childNodes.length; // no access function for (var i = 0; i < length; i++) { menuObj.getMenuAt(i).addEventListener("change",this); } } } menu.addEventListener("focusIn",menuListener);
// ----- ----- menu_con.trigger(); //定义msg()函数 function msg(content) { import mx.controls.Alert; Alert.show(content, "", Alert.OK); } //定义loadhtml函数 function loadhtml(htmlurl) { loadVariablesNum(htmlurl, 0); var myDoc = new LoadVars(); myDoc.load(htmurl); myDoc.onData = function() { ShowData.text = content; }; } stop()
6.每一桢对应相应的功能,记得要写上stop()啊 7ctrl+enter试试! 说明:功能项目的检测是通过groupName来实现的,而对于我们写入某桢的功能可暂不在xml中发布,这样,当你心情不错的时候,只要再xml中添加相应的项即可实现所谓的升级了!(这尤其适合于您为其他的公司制作的作品,其中包括的功能可后给公司提供,这就是所谓的手后富服务了!)开个玩笑,这个功能其实更适用于您以后合谋个程序交换数据作预留接口用。
点击浏览该文件
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |