打印

[应用] 一个树形菜单(好多级哦)附图

做开发的过程中用到,自己手写了一个,拿出来分享一下。
效果图如下:

flash文件中第一帧上的代码:
稍作解释,还有你需要那个级别层次显示都可以自己控制,不过得加些代码。
flash源文件中拖一个文本框,不是库中的,设置属性如图。在拖一个库中的滚动条放到文本框中,他们会自动吻合。

以下是flash中的源代码:
复制内容到剪贴板
代码:
System.useCodepage = false;
//课程xml
//课程数组
var kc_XML:XML = new XML();
var kc_arr:Array = new Array();
//当前点击的对象的index
var kc_NowIndex:Number = new Number();
kc_XML.ignoreWhite = true;
//当课程数据加载完后执行下列语句
kc_XML.onLoad = function(succ) {
    if (succ) {
        jiexi();
        showList();
        //doAction(0);
    }
};
//加载课程数据
kc_XML.load("tree.xml");
//解析加载的数据
function jiexi() {
    kc_len = kc_XML.childNodes[0].childNodes.length;
    var kc_node:XMLNode = kc_XML.childNodes[0].childNodes;
    for (var i:Number = 0; i<kc_len; i++) {
        var arr:Array = String(kc_node[i].attributes.timePoint).split(",");
        var arr_len:Number = arr.length;
        var timePoint_arr:Array = new Array();
        for (var n:Number = 0; n<arr_len; n++) {
            timePoint_arr.push(hmsToM(arr[n]));
        }
                               //将加载的数据解析好后放在kc_arr中
        kc_arr.push({type:Number(kc_node[i].attributes.type), video:kc_node[i].attributes.video,  label:"<a href='asfunction:doAction,"+i+"'>"+String(kc_node[i].attributes.name).substr(0, 16)+"</a>", showChild:true});
    }
    
}
//点击后响应在这
function doAction(t:Number) {
    trace("你点击了"+kc_arr[t].label)
    // 脱壳//加壳
    var str:String = kc_arr[kc_NowIndex].label;
    var begin_num:Number = str.indexOf(">", 0);
    var length_num:Number = str.lastIndexOf("<")-begin_num;
    kc_arr[kc_NowIndex].label = "<a href='asfunction:doAction,"+kc_NowIndex+"'>"+str.substr(begin_num+1, length_num-1)+"</a>";
    kc_NowIndex = t;
    var str:String = kc_arr[t].label;
    var begin_num:Number = str.indexOf(">", 0);
    var length_num:Number = str.lastIndexOf("<")-begin_num;
    kc_arr[t].label = "<font color='#00ff00'>"+str.substr(begin_num+1, length_num-1)+"</font>";
    showList();
}
//高亮显示目录中的某个章节
function gaoliang(t:Number) {
    // 脱壳//加壳
    var str:String = kc_arr[kc_NowIndex].label;
    var begin_num:Number = str.indexOf(">", 0);
    var length_num:Number = str.lastIndexOf("<")-begin_num;
    kc_arr[kc_NowIndex].label = "<a href='asfunction:doAction,"+kc_NowIndex+"'>"+str.substr(begin_num+1, length_num-1)+"</a>";
    kc_NowIndex = t;
    var str:String = kc_arr[t].label;
    var begin_num:Number = str.indexOf(">", 0);
    var length_num:Number = str.lastIndexOf("<")-begin_num;
    kc_arr[t].label = "<font color='#00ff00'>"+str.substr(begin_num+1, length_num-1)+"</font>";
    showList();
}
//显示树状菜单
function showList() {
    var kc_len:Number = kc_arr.length;
    var str:String = new String();
    var temp_type:Number = 0;
    for (var i:Number = 0; i<kc_len; i++) {
        temp_type = kc_arr[i].type;
        if (kc_arr[i].showChild == true) {
            if (kc_arr[i].type<kc_arr[i+1].type) {
                str += WS(kc_arr[i].type)+"<font color='#ff0000'><a href='asfunction:hideChild,"+i+"'>○</a></font> "+kc_arr[i].label+newline;
            } else {
                str += WS(kc_arr[i].type)+"Ο "+kc_arr[i].label+newline;
            }
        } else {
            str += WS(kc_arr[i].type)+"<font color='#ff0000'><a href='asfunction:showChild,"+i+"'>◎</a></font> "+kc_arr[i].label+newline;
            for (var n:Number = i+1; n<kc_len; n++) {
                if (kc_arr[n].type<=temp_type) {
                    i = n-1;
                    break;
                }
            }
            if (n == kc_len) {
                break;
            }
        }
    }
    list_txt.htmlText = str;
}
//显示子菜单
function showChild(t:Number) {
    kc_arr[t].showChild = true;
    showList();
}
//隐藏子菜单
function hideChild(t:Number) {
    kc_arr[t].showChild = false;
    showList();
}
//填充空格形成层级
function WS(n:Number) {
    var temp_str:String = new String();
    for (var i:Number = 1; i<n; i++) {
        temp_str += "  ";
    }
    return temp_str;
}
下面是xml文件
其中的type属性指示的是层级。暂未设置层级数,内部并无检测树形菜单的可靠性,故写下列文件需小心
复制内容到剪贴板
代码:
<a>
    <section type="1" name="信息组织课程介绍 " video="01/localclip.asx"/>
    <section type="2" name="课程概况 " video="01/localclip.asx"/>
    <section type="2" name="课程要求 " video="01/localclip.asx"/>
    <section type="2" name="教学方式 " video="01/localclip.asx"/>
    <section type="2" name="四、教材与参考资料 " video="01/localclip.asx"/>
    <section type="1" name="第一章 信息组织概述 " video="01/localclip.asx"/>
    <section type="2" name="一.信息组织的含义 " video="01/localclip.asx"/>
    <section type="3" name="信息组织的对象-信息资源范围 " video="01/localclip.asx"/>
    <section type="3" name="信息组织与信息检索流程图 " video="01/localclip.asx"/>
    <section type="3" name="信息组织与信息检索关系 " video="01/localclip.asx"/>
    <section type="2" name="二.信息组织的形式和检索途径 " video="01/localclip.asx"/>
    <section type="3" name="2.检索体系的类型 " video="01/localclip.asx"/>
    <section type="3" name="文献目录 " video="01/localclip.asx"/>
    <section type="3" name="索引 " video="01/localclip.asx"/>
    <section type="3" name="机读数据库 " video="01/localclip.asx"/>
    <section type="3" name="网络搜索引擎 " video="01/localclip.asx"/>
    <section type="3" name="2)按照标识特征和提供的检索途径分 " video="01/localclip.asx"/>
    <section type="3" name="3)按照标识记录方式分 " video="01/localclip.asx"/>
    <section type="2" name="三.信息组织处理方式和研究内容 " video="01/localclip.asx"/>
    <section type="3" name="1.信息处理的任务 " video="01/localclip.asx"/>
    <section type="3" name="2.信息处理的方法 " video="01/localclip.asx"/>
    <section type="3" name="信息组织研究领域 " video="01/localclip.asx"/>
</a>
下载源文件:


[ 本帖最后由 kenjor01 于 2008-3-18 13:07 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
本帖最近评分记录
  • lzyy 威望 +2 谢谢分享 2008-3-19 22:51
快乐每一天!
效果还不错
关注一下啊,完全由一个xml文件和一个textField 生成哦!也花了不少心血哦。目前支持4-5层不是问题吧
快乐每一天!
不错
要能做到可以折叠,展开就更好了
*UP*
http://www.mk-pig.com/cworld/

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
当然可以了。点击每个枝节的前面的圆圈就可以收放自如了。
快乐每一天!

TOP

点击没有反映?貌似实现不了点击链接网页?

TOP

想法不错
但是好像如果层次再增加了会很复杂噢。。。

TOP

不复杂,层次增加只跟 xml文件中的type属性有关系。我上面说到4-5层是因为 每一层都有缩进的空字符,而,我内部没有对这个作出处理。所以层级大于10情况就不好了。

[ 本帖最后由 kenjor01 于 2008-3-21 14:09 编辑 ]
快乐每一天!

TOP

请问什么是加壳脱壳啊

TOP

支持楼主的精神!
我爱慢慢吃葡萄!

TOP

脱壳加壳,这个是我的土语,就是加上修饰和去掉修饰
快乐每一天!

TOP

嗯,有空研究研究....
这条旧路依然没有改变

TOP

不错.有机会学习一下

TOP

look

look

TOP

正好用上,研究一下

谢谢楼主 的贡献精神!

TOP

从首页上看到过这个树形菜单
确实很强大
淘宝手机

TOP

收藏了.
AS is in my heart

TOP

哈哈,真不错,谢谢分享!

TOP

不错的tree组件

TOP

支持

TOP

支持..

TOP

好棒~
看起来很直观实用!

TOP

好久没有来逛逛了,感谢大家的捧场啊,HBrO 你也来了啊,今天仔细看了看源代码,有些东西还是没有清理干净,让大家费时间了。真不好意思,下次发一定注意。

[ 本帖最后由 kenjor01 于 2008-8-26 18:34 编辑 ]
快乐每一天!

TOP