Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]

时间:2021-10-25 17:10:35

    其实这个控件的核心基本都在JS上,而相关的数据绑定和显示却非常简单。而需要说明的是在Discuz!NT的1.0
和2.0正式版,这个控件做过一些调整,当然改动也基本上是在JS上,今天给大家的源码是1.0正式版的代码,虽然
有些“旧”,但程序本身的思想没变,大家只要明白了这里的源码,有了这碗酒垫底,相信再看即将开源的2.0代码,
就会一目了然了。

    好了,废话到此,马上开始今天的话题!

    先请大家看一下这个控件运行时的效果图:

    效果图1:
 
        Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 

    效果图2: 
  Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
    首先将相应的C#代码放出来:

    

  1Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Property ScriptPath
 21 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 22
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 23Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    Property ImageUrl

 45 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 46
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 47Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    Property CssPath

 67 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 68
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 69Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    Property XmlFileFullPathName

 89 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 90Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    protected override void OnPreRender(EventArgs e)

119 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
120Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
/// <summary> 
121Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] ///
 将此控件呈现给指定的输出参数。
122Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] /// </summary>

123Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] /// <param name="output"> 要写出到的 HTML 编写器 </param>

124Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] protected override void  Render(HtmlTextWriter output)
125Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
{
126
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         
127Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  output.Write("<div class=\"sdmenu\">\r\n"
);
128
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  
129Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  System.Data.DataSet dsSrc = new
 System.Data.DataSet();
130Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  dsSrc.ReadXml(Page.Server.MapPath(this
.XmlFileFullPathName));
131
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
132Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  int count=0
;
133Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  foreach(System.Data.DataRow dr in dsSrc.Tables[0
].Rows)
134Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  
{
135Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   输出主菜单

153Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
154Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   输出子菜单

193Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
194Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   //打印分割符

195Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   output.Write("<div class=\"splitter\">&nbsp;</div>\r\n");
196Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   count++
;
197Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   }

198Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
199Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   output.Write("</div>\r\n"
);   
200Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]  }

201 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] }
202
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
203
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
204
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
205Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]

    上面的代码因为太简单,就不多做介绍了。而XML的结构如下:


    其中的submain表(这里暂且这样说)的menuparentid(子菜单的父menuid),是关联mainmenu表的menuid,这样就能够这
这两个表有一个主从结构了。当前如果将这两个表合成“一个”也可以,前提是要减少数据冗余,因为mainmenu表里是不
包含link(点击子菜单跳转地址),frameid(子菜单跳转的frameid)这样的信息的。
   
   
    最后要说明的是这个控件的JS,代码如下(详情见注释):
    

  1Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
  2Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var remember = false//记录当前菜单状态,当下次访问时使用

  3Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var contractall_default= 1//系统菜单项状态  1:只显示第一项  2:展开所有项   3:收缩所有的菜单项
  4Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
  5Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var menu, titles, submenus, arrows, bypixels; //定义指定的菜单数组变量
  6Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var heights = new  Array();
  7Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var speed=10;  //加载菜单项的速度 

  8Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
  9Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]var n =  navigator.userAgent;
 10
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 11Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]if(/Opera/
.test(n)) 
 12Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
 13Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    bypixels = 2
;
 14Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

 15Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]else if(/Firefox/ .test(n)) 
 16Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
 17Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    bypixels = 3
;
 18Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

 19Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]else if(/MSIE/ .test(n)) 
 20Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
 21Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]   bypixels = 2
;
 22Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

 23 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 24
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 25Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//展开所有菜单项

 26Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function slash_expandall()
 27Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
 28Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if (typeof menu!="undefined"
)
 29Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
 30Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     for(i=0; i<Math.max(titles.length, submenus.length); i++
)
 31Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
 32Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      titles[i].className="title"
;
 33Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      arrows[i].src = imgpath+"/top_level_ico1.gif"
;
 34Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      submenus[i].style.display=""
;
 35Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      submenus[i].style.height = heights[i]+"px"
;
 36Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

 37Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

 38Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

 39 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 40
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 41Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//收缩所有菜单项

 42Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function slash_contractall()
 43Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
 44Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if (typeof menu!="undefined"
)
 45Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
 46Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     for(i=0; i<Math.max(titles.length, submenus.length); i++
)
 47Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
 48Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      titles[i].className="titlehidden"
;
 49Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      arrows[i].src = imgpath+"/top_level_ico2.gif"
;
 50Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      submenus[i].style.display="none"
;
 51Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]      submenus[i].style.height = 0
;
 52Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

 53Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

 54Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

 55 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 56
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
 57
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
 58Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//初始化函数

 59Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]function init() {
 60Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    menu = getElementsByClassName("sdmenu""div", document)[0
];
 61Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    titles = getElementsByClassName("title""span"
, menu);
 62Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    submenus = getElementsByClassName("submenu""div"
, menu);
 63Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    arrows = getElementsByClassName("arrow""img"
, menu);
 64Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    for(i=0; i<Math.max(titles.length, submenus.length); i++

 65Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
 66Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        titles[i].onclick =
 gomenu;
 67Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        arrows[i].onclick =
 gomenu;
 68Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        heights[i] =
 submenus[i].offsetHeight;
 69Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[i].style.height = submenus[i].offsetHeight+"px"
;
 70Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        /*alert(i); */

 71Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
 72Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if(i>0
)
 73Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
 74Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]           titles[i].className="titlehidden"
;
 75Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        arrows[i].src = imgpath+"/top_level_ico2.gif"
;
 76Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[i].style.display="none"
;
 77Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[i].style.height = 0
;
 78Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        //alert('123');

 79Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

 80Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] }

 81Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
 82Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if
(remember)
 83Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
{
 84
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     restore();
 85Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] }

 86Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
 87Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] //根据菜单项状态设置,显示菜单

 88Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] switch(contractall_default)
 89Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] 
{
 90Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     case 1

 91Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
 92Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         break
;
 93Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

 94Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     case 2:
 95Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
 96Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         slash_expandall();break
;
 97Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

 98Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     case 3:
 99Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
100
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         slash_contractall();
101Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

102Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     default:
103Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     
{
104Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         break
;
105Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]     }

106Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] }

107Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

108 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
109Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//存储菜单项状态

110Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]function restore()  {
111Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if(getcookie("menu"!= null
{
112Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        var hidden = getcookie("menu").split(","
);
113Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        for(var i in hidden) 
{
114
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]           
115Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            titles[hidden[i]].className = "titlehidden"
;
116Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            submenus[hidden[i]].style.height = "0px"
;
117Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            submenus[hidden[i]].style.display = "none"
;
118Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            arrows[hidden[i]].src =imgpath+"/top_level_ico2.gif"
;
119Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]         }

120Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

121Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

122 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
123Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//定向到指定的菜单项进行相应操作

124Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function gomenu(e)
125Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
126Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if (!
e)
127Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
128Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]       e = window.event
;
129Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }
   
130
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
131Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var ce = (e.target) ?
 e.target : e.srcElement;
132
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
133
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var sm;
134
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
135Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    //找到当前菜单项在数组中的位置,用于下面显示或隐藏判断

136Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    for(var i in titles) 
137Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
138Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if(titles[i] == ce || arrows[i] ==
 ce)
139Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
140Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            sm =
 i;
141Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        }

142Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

143Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
144Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    //当前菜单项是展示状态时

145Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if(parseInt(submenus[sm].style.height) > parseInt(heights[sm])-2
146Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
147
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        hidemenu(sm);
148Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

149Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    else if(parseInt(submenus[sm].style.height) < 2)  //当是收缩状态
150Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    {
151Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        titles[sm].className = "title"
;
152
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
153Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        //当菜单只能展开一项(其余菜单项须全部收起)

154Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if(contractall_default ==1)
155Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
156
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            slash_contractall();
157Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        }

158Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        //显示指定的菜单项
159Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        showmenu(sm);
160Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

161Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

162 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
163Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//隐藏指定的菜单元素

164Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function hidemenu(sm) 
165Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
166Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var nr = submenus[sm].getElementsByTagName("a").length*bypixels+
speed;
167Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    submenus[sm].style.height = (parseInt(submenus[sm].style.height)-nr)+"px"
;
168Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var to = setTimeout("hidemenu("+sm+")"5
);
169
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
170Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if(parseInt(submenus[sm].style.height) <=
 nr) 
171Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
172
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        clearTimeout(to);
173Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[sm].style.display = "none"
;
174Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[sm].style.height = "0px"
;
175Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        arrows[sm].src = imgpath+"/top_level_ico2.gif"
;
176Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        titles[sm].className = "titlehidden"
;
177Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

178Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

179 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
180Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//显示指定的菜单元素

181Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function showmenu(sm) 
182Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
183Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var nr = submenus[sm].getElementsByTagName("a").length*bypixels+
speed;
184Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    submenus[sm].style.display = ""
;
185Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    submenus[sm].style.height = (parseInt(submenus[sm].style.height)+nr)+"px"
;
186Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var to = setTimeout("showmenu("+sm+")"30
);
187Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if(parseInt(submenus[sm].style.height) > (parseInt(heights[sm])-
nr)) 
188Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
189
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        clearTimeout(to);
190Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        submenus[sm].style.height = heights[sm]+"px"
;
191Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        arrows[sm].src = imgpath+"/top_level_ico1.gif"
;
192Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

193Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

194 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
195Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//保存菜单元素

196Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码] function store() 
197Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
198Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var hidden = new
 Array();
199Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    for(var i in
 titles) 
200Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
201Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if(titles[i].className == "titlehidden"
)
202Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
203
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            hidden.push(i);
204Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        }

205Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

206Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    putcookie("menu", hidden.join(","), 5);
207Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

208 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
209Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]//获取指定样式的元素

210Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]function getElementsByClassName(strClassName, strTagName, oElm) {
211Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var arrElements = (strTagName == "*" && document.all)?
 document.all : oElm.getElementsByTagName(strTagName);
212Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var arrReturnElements = new
 Array();
213Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    strClassName = strClassName.replace(/\-/g, "\\-"
);
214Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"
);
215
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var oElement;
216Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    for(var i=0; i<arrElements.length; i++
)
217Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
218Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        oElement =
 arrElements[i];      
219Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if
(oRegExp.test(oElement.className))
220Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
221
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            arrReturnElements.push(oElement);
222Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        }
   
223Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

224Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    return (arrReturnElements)
225Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

226 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
227
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]function putcookie(c_name,value,expiredays) 
228Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
229Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    var exdate=new
 Date();
230Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    exdate.setDate(exdate.getDate()+
expiredays);
231Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    document.cookie = c_name + "=" + escape(value) + ((expiredays==null? "" : ";expires="+
exdate);
232Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

233 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
234
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]function getcookie(c_name) 
235Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
{
236Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    if(document.cookie.length > 0

237Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    
{
238Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        var c_start = document.cookie.indexOf(c_name + "="
);
239Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        if(c_start != -1
)
240Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        
{
241Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            c_start = c_start + c_name.length + 1
;
242Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            var c_end = document.cookie.indexOf(";"
,c_start);
243Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            if(c_end == -1
)
244Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            
{
245Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]                c_end =
 document.cookie.length;
246Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            }

247Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]            return unescape(document.cookie.substring(c_start, c_end));
248Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]        }

249Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    }

250Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]    return null;
251Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]}

252 Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
253Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]window.onload =
 init;
254
Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]
255Discuz!NT控件剖析 之 左侧导航控件 [原创: 附源码]

 

    其余的大家可以详细看一下包中的相关内容即可, 这里就不再多说了:)

 
    好了,主要是东西就先交待到这里了。如果大家有什么问题或建议,欢迎与我交流,我的邮件是daizhj@discuz.com,
daizhj617595@126.com  
    

    下载地址:/Files/daizhj/navmenu.rar

    关键字: .net, 控件, navmenu, 导航, control, discuz, discuz!nt, discuznt, 代震军, daizhj