收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 21200|回复: 32

[服务器端交互] 二级导航菜单(flash+xml)

[复制链接]
发表于 2004-4-1 07:55:00 | 显示全部楼层 |阅读模式
【功能说明】
使用flash的显示功能和XML的灵活配置功能做了一个二级导航菜单;
可以进行收缩显示;
//=======menu.xml内容=========

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <root>
  3.         <menu label="关于我们|About US">
  4.                 <item label="公司简介" target="_seft" goto=""/>
  5.                 <item label="企业文化" target="_seft" goto=""/>
  6.                 <item label="公司员工" target="_seft" goto=""/>
  7.     </menu>
  8.         <menu label="新闻中心|News">
  9.                 <item label="行业新闻" target="_seft" goto=""/>
  10.                 <item label="公司新闻" target="_seft" goto=""/>
  11.     </menu>
  12.         <menu label="产品发布|Product">
  13.                 <item label="产品分类1" target="_seft" goto=""/>
  14.                 <item label="产品分类2" target="_seft" goto=""/>
  15.                 <item label="产品分类3" target="_seft" goto=""/>
  16.                 <item label="产品分类4" target="_seft" goto=""/>
  17.                 <item label="产品分类5" target="_seft" goto=""/>
  18.         </menu>
  19.         <menu label="联系我|Email" target="_seft" goto="mailto:qiankinglong@hotmail.com"/>
  20.         <menu label="友情联接|Link">
  21.                 <item label="Klstudio" target="_seft" goto="http://www.klstudio.com"/>
  22.                 <item label="Sohu" target="_seft" goto="http://www.sohu.com"/>
  23.                 <item label="网易" target="_seft" goto="http://www.163.com"/>
  24.         </menu>
  25. </root>
复制代码

【功能截图】
图片显示1


图片显示2


图片显示3



【功能显示】
http://www.klstudio.com/all_image/resource/menu.html
【文件下载】
tree.rar打包下载

评分

参与人数 1威望 +4 收起 理由
经典论坛大妈 + 4 历史打分

查看全部评分

发表于 2004-4-1 09:54:00 | 显示全部楼层
不错不错,打分鼓励!
回复 支持 反对

使用道具 举报

发表于 2004-4-1 09:56:00 | 显示全部楼层
呵呵,看的像DRK的menu~~~
回复 支持 反对

使用道具 举报

发表于 2004-4-1 10:06:00 | 显示全部楼层
请问多层目录树的递归怎么实现呢?
回复 支持 反对

使用道具 举报

发表于 2004-4-1 10:08:00 | 显示全部楼层
不好,沒有給出fla源文件
回复 支持 反对

使用道具 举报

发表于 2004-4-1 10:33:00 | 显示全部楼层
楼主,有没有fla阿?
回复 支持 反对

使用道具 举报

发表于 2004-4-1 10:46:00 | 显示全部楼层
对啊。偶系菜鸟啊,也想要fla文件啊
回复 支持 反对

使用道具 举报

发表于 2004-4-1 10:55:00 | 显示全部楼层
能否给出fla里的AS
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 14:24:00 | 显示全部楼层
===主场景代码 ===

  1. stop();
  2. menu_xml_count = 0;
  3. menu_y = 30;
  4. id = 0;
  5. //读取menu.xml文件;
  6. menu_xml = new XML();
  7. menu_xml.ignoreWhite = true;
  8. menu_xml.onLoad = function(sc) {
  9.         if (sc) {
  10.                 _root.init(this.firstChild);
  11.         }
  12. };
  13. menu_xml.load("menu.xml");
  14. function init(nd) {
  15.         menu_xml_count = nd.childNodes.length;
  16.         setMenu(nd.firstChild);
  17. }
  18. function setMenu(node) {
  19.         if (node != null) {
  20.                 var initObj = new Object();
  21.                 initObj._x = 0;
  22.                 if (menu_obj != undefined) {
  23.                         initObj._y = menu_obj._y+menu_obj._height;
  24.                 } else {
  25.                         initObj._y = menu_y;
  26.                 }
  27.                 initObj.id = id;
  28.                 initObj.node = node;
  29.                 initObj.label = node.attributes.label;
  30.                 initObj.target = node.attributes.target;
  31.                 initObj.goto = node.attributes.goto;
  32.                 menu_obj = _root.attachMovie("menu_mc", "menu"+id+"_mc", id+100, initObj);
  33.                 id = id+1;
  34.                 setMenu(node.nextSibling);
  35.         } else {
  36.                 id = 0;
  37.                 fscommand("setHeight", menu_obj._y+menu_obj._height);
  38.                 play();
  39.         }
  40. }
  41. function moveMenu(menu_id) {
  42.         delete old_obj;
  43.         for (i=0; i<menu_xml_count; i++) {
  44.                 var move_obj = eval("menu"+i+"_mc");
  45.                 if (menu_id == move_obj.id) {
  46.                         if (move_obj.opened) {
  47.                                 move_obj.close_item();
  48.                         } else {
  49.                                 move_obj.open_item();
  50.                         }
  51.                 } else {
  52.                         move_obj.close_item();
  53.                 }
  54.                 if (old_obj == undefined) {
  55.                         move_obj._y = menu_y;
  56.                 } else {
  57.                         move_obj._y = old_obj._y+old_obj._height;
  58.                 }
  59.                 old_obj = move_obj;
  60.         }
  61.         fscommand("setHeight", move_obj._y+move_obj._height);
  62. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 14:26:00 | 显示全部楼层
==== 一级菜单MC里代码====

  1. //初始化;
  2. opened = false;
  3. expand = false;
  4. sub_id = 0;
  5. label_en_txt.text = "Menu";
  6. label_cn_txt.text = "菜单名称";
  7. //设置label;
  8. if (label != undefined) {
  9.         var label_arr = this.label.split("|");
  10.         label_cn_txt.text = label_arr[0];
  11.         label_en_txt.text = label_arr[1];
  12. }
  13. //===========;
  14. //设置expand;
  15. if (node.childNodes.length>0) {
  16.         expand = true;
  17. }
  18. //===========;
  19. //设置target;
  20. if (this.target == undefined || this.target == "") {
  21.         this.target = "_self";
  22. }
  23. if (!this.expand) {
  24.         arrow_mc._visible = false;
  25. }
  26. //按钮事件;
  27. hit_btn.onPress = function() {
  28.         menu_up();
  29. };
  30. hit_btn.onRollOver = function() {
  31.         menu_over();
  32. };
  33. hit_btn.onRollOut = function() {
  34.         menu_out();
  35. };
  36. hit_btn.onRelease = function() {
  37.         menu_out();
  38.         if (expand) {
  39.                 _root.moveMenu(this._parent.id);
  40.         } else {
  41.                 gotoPage();
  42.         }
  43. };
  44. hit_btn.onReleaseOutside = function() {
  45.         menu_out();
  46. };
  47. function menu_over() {
  48.         menu_mc.gotoAndPlay("over");
  49. }
  50. function menu_out() {
  51.         menu_mc.gotoAndPlay("out");
  52. }
  53. function menu_up() {
  54.         menu_mc.gotoAndStop("up");
  55. }
  56. function gotoPage() {
  57.         if (this.goto != undefined && this.goto != "") {
  58.                 getURL(this.goto, this.target);
  59.         }
  60. }
  61. function open_item() {
  62.         this.createEmptyMovieClip("item_list_mc", 10);
  63.         item_list_mc._y = 25;
  64.         setMenu(node.firstChild);
  65.         arrow_mc._rotation = 90;
  66.         opened = true;
  67. }
  68. function close_item() {
  69.         item_list_mc.removeMovieClip();
  70.         arrow_mc._rotation = 0;
  71.         opened = false;
  72. }
  73. function setMenu(nd) {
  74.         if (nd != null) {
  75.                 var initObj = new Object();
  76.                 initObj._x = 0;
  77.                 if (item_obj != undefined) {
  78.                         initObj._y = item_obj._y+item_obj._height;
  79.                 } else {
  80.                         initObj._y = 0;
  81.                 }
  82.                 initObj.label = nd.attributes.label;
  83.                 initObj.target = nd.attributes.target;
  84.                 initObj.goto = nd.attributes.goto;
  85.                 item_obj = item_list_mc.attachMovie("item_mc", "item"+sub_id+"_mc", sub_id+100, initObj);
  86.                 var sub_obj = new Object();
  87.                 sub_obj._x = 0;
  88.                 sub_obj._y = 18;
  89.                 if (sub_id+1>=node.childNodes.length) {
  90.                         item_obj.attachMovie("line_menu_mc", "line_mc", 10, sub_obj);
  91.                 } else {
  92.                         item_obj.attachMovie("line_item_mc", "line_mc", 10, sub_obj);
  93.                 }
  94.                 sub_id = sub_id+1;
  95.                 setMenu(nd.nextSibling);
  96.         } else {
  97.                 sub_id = 0;
  98.         }
  99. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 14:27:00 | 显示全部楼层
=====二级菜单MC里的代码====

  1. //初始化;
  2. label_txt.text = "菜单名称";
  3. if (this.label != undefined) {
  4.         label_txt.text = this.label;
  5. }
  6. color_out();
  7. //设置target;
  8. if (this.target == undefined || this.target == "") {
  9.         this.target = "_self";
  10. }
  11. //按钮事件;
  12. hit_btn.onPress = function() {
  13.         menu_up();
  14.         color_over();
  15. };
  16. hit_btn.onRollOver = function() {
  17.         menu_over();
  18.         color_over();
  19. };
  20. hit_btn.onRollOut = function() {
  21.         menu_out();
  22.         color_out();
  23. };
  24. hit_btn.onRelease = function() {
  25.         menu_out();
  26.         color_out();
  27.         gotoPage();
  28. };
  29. hit_btn.onReleaseOutside = function() {
  30.         menu_out();
  31.         color_out();
  32. };
  33. function menu_over() {
  34.         item_mc.gotoAndPlay("over");
  35. }
  36. function menu_out() {
  37.         item_mc.gotoAndPlay("out");
  38. }
  39. function menu_up() {
  40.         item_mc.gotoAndStop("up");
  41. }
  42. function gotoPage() {
  43.         if (this.goto != undefined && this.goto != "") {
  44.                 getURL(this.goto, this.target);
  45.         }
  46. }
  47. function color_over() {
  48.         label_txt.textColor = 0x000000;
  49. }
  50. function color_out() {
  51.         label_txt.textColor = 0xffffff;
  52. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2004-4-1 15:22:00 | 显示全部楼层
可否给个源码啊!!!
回复 支持 反对

使用道具 举报

发表于 2004-4-1 15:58:00 | 显示全部楼层
代码都给出了,不会懒到这种地步吧....
回复 支持 反对

使用道具 举报

发表于 2004-4-1 20:11:00 | 显示全部楼层
用樓主的xml文件我也試著搞了一個二級菜單,
[f w=150 h=320]http://www.freewebs.com/seekyes/swf/xmlMenu.swf[/f]
回复 支持 反对

使用道具 举报

发表于 2004-4-1 20:14:00 | 显示全部楼层
怎么看不到?免費空間是不好,用鏈接看看
http://www.freewebs.com/seekyes/swf/xmlMenu.swf
回复 支持 反对

使用道具 举报

发表于 2004-4-1 20:25:00 | 显示全部楼层
只有一個mc就行了,建一個標簽名為menuList的mc,這個mc里面只有一個實體名為menutext的動態文本,將這個mc做個linkage以便在代碼中使用attachMovie載入,回到場景,在第一幀中加入下面的代碼就制作完成了.xml文件使用樓主的.

var xx = 60;//菜單的x坐標
var yy = 5;//菜單的y坐標
xmlMenu = new XML();
xmlMenu.ignoreWhite = true;
xmlMenu.load("menu.xml");
var index = 0;
xmlMenu.onLoad = function(success) {
        if (success) {
                loadOK();
        } else {
                trace("加載失敗");
        }
};
function loadOK() {
        var firstLevel = xmlMenu.firstChild.childNodes;
        var total = firstLevel.length;
        for (var i = 1; i<=total; i++) {
                attachMovie("menuList", "menuList"+i, 100+i);
                var firstMenu = this["menuList"+i];
                firstMenu.menutext.autoSize = true;
                firstMenu.menutext.text = firstLevel[i-1].attributes["label"];
                firstMenu.seLevel = xmlMenu.firstChild.childNodes[i-1].childNodes;
                firstMenu.total2 = firstMenu.seLevel.length;
                firstMenu.showtrue = 1;
                if (firstMenu.total2<=0) {//如果沒有第二級就直接給鏈接
                        firstMenu.urlstr = firstLevel[i-1].attributes["goto"]
                        firstMenu.urltarget = firstLevel[i-1].attributes["target"]
                        firstMenu.onRelease = function() {
                                getURL(this.urlstr,urltarget);
                        };
                }
                firstMenu.onMouseDown = function() {
                        if (this.hitTest(_root._xmouse, (_root._ymouse+this._height-this.menutext._height), false)) {
                                if (this.showtrue == 1 || !this.hitTest(_root._xmouse, (_root._ymouse+this._height-this.menutext._height), false)) {
                                        if (this.total2>0) {
                                                j = 1;
                                                this.onEnterFrame = function() {
                                                        //為了有個展開過程就不用for了
                                                        aa = this.attachMovie("menuList", "menuList"+j, 10+j);
                                                        aa.menutext.autoSize = true;
                                                        aa.menutext.textColor = "0xaa00aa";
                                                        aa.menutext.text = this.seLevel[j-1].attributes["label"];
                                                        aa.urlstr = this.seLevel[j-1].attributes["goto"];
                                                        aa.urltarget = this.seLevel[j-1].attributes["target"];
                                                        aa.onRelease = function() {
                                                                getURL(this.urlstr, this.urltarget);
                                                        };
                                                        aa._y = aa._height*j;
                                                        if (j<this.total2) {
                                                                j++;
                                                        } else {
                                                                this.onEnterFrame = null;
                                                        }
                                                };
                                        }
                                        this.showtrue = 0;
                                } else if (this.showtrue == 0 && this.hitTest(_root._xmouse, (_root._ymouse+this._height-this.menutext._height), false)&& !this.hitTest(_root._xmouse, (_root._ymouse+this._height), false)) {
                                        for (var j = 1; j<=this.total2; j++) {
                                                bb = this["menuList"+j];
                                                bb.removeMovieClip();
                                        }
                                        this.showtrue = 1;
                                }
                        }
                };
        }
}
onEnterFrame = function () {//不停檢測第一級菜單坐標
        if (xmlMenu.firstChild.childNodes.length != undefined) {
                for (var i = 1; i<=xmlMenu.firstChild.childNodes.length; i++) {
                        var firstMenu = this["menuList"+i];
                        firstMenu._x = xx;
                        if (i<=1) {
                                firstMenu._y = yy;
                        } else {
                                upMenu = this["menuList"+(i-1)];
                                firstMenu._y = upMenu._y+upMenu._height;
                        }
                }
        }
};

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 23:09:00 | 显示全部楼层
jimbob在上个帖子中说
代码都给出了,不会懒到这种地步吧....


现提供源代码
menu.rar
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-1 23:14:00 | 显示全部楼层
伟仔在上个帖子中说
怎么看不到?免費空間是不好,用鏈接看看
http://www.freewebs.com/seekyes/swf/xmlMenu.swf


效果还可以呀!
回复 支持 反对

使用道具 举报

发表于 2004-4-1 23:41:00 | 显示全部楼层
这可是收藏的啊
回复 支持 反对

使用道具 举报

发表于 2004-4-2 09:40:00 | 显示全部楼层
kinglong在上个帖子中说
jimbob在上个帖子中说
[quote] 代码都给出了,不会懒到这种地步吧....


现提供源代码
menu.rar [/quote]


晕....    俺是对看了你的代码,还在要源码的人说的,  俺不大赞同提供源代码下载,那样培养惰性
回复 支持 反对

使用道具 举报

发表于 2004-4-2 16:16:00 | 显示全部楼层
Very Good
回复 支持 反对

使用道具 举报

发表于 2004-5-21 11:26:00 | 显示全部楼层
顶一顶
回复 支持 反对

使用道具 举报

发表于 2004-8-26 14:40:00 | 显示全部楼层
请问楼主怎样使每个菜单点击后同时展开呀???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-27 22:28:00 | 显示全部楼层
365days在上个帖子中说
请问楼主怎样使每个菜单点击后同时展开呀???



function moveMenu(menu_id) {
        delete old_obj;
        for (i=0; i<menu_xml_count; i++) {
                var move_obj = eval("menu"+i+"_mc");
                                //把这段代码改成这样就可以实现你的要求!
                                //不过我觉得你的要求不太合理!
                move_obj.open_item();
                if (old_obj == undefined) {
                        move_obj._y = menu_y;
                } else {
                        move_obj._y = old_obj._y+old_obj._height;
                }
                old_obj = move_obj;
        }
        fscommand("setHeight", move_obj._y+move_obj._height);
}
回复 支持 反对

使用道具 举报

发表于 2004-9-3 08:40:00 | 显示全部楼层
哈,楼主误解我的意思了
我说的是这种效果:
点击那一级菜单那一个菜单就展开
他不影响其他的菜单
就想黑色闪客里的FLASH+ASP+XML一样!!
哈哈!
回复 支持 反对

使用道具 举报

发表于 2007-9-26 10:56:52 | 显示全部楼层
楼主可否给个步骤,我效果出不来啊。
回复 支持 反对

使用道具 举报

发表于 2009-11-24 17:51:15 | 显示全部楼层
提醒:最后回贴距现在 791 天,请不要无意义回复

提供的下载地址都是无法找到。怎么弄的啊。请更新链接
回复 支持 反对

使用道具 举报

发表于 2010-6-3 10:35:50 | 显示全部楼层

sdfsd

我正要这个东东
回复 支持 反对

使用道具 举报

发表于 2010-9-1 10:28:09 | 显示全部楼层
正需要这个效果,怎么做的呢?
看完上面前几楼说的,我还是没有把效果做出来,求哪位大哥指点一下
回复 支持 反对

使用道具 举报

发表于 2010-9-1 10:30:54 | 显示全部楼层
原帖由 [i]jimbob 于 2004-4-1 09:54 发表
不错不错,打分鼓励!

冒似你看到了这种效果?这个二级菜单是纵向的还是横向的呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-7-24 13:29 , Processed in 0.337032 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表