用javascript封装的导航菜单

javascript|菜单|导航|封装

正好这几天公司不忙,学校又没有事情,所以想抽空架一个个人主页,设计的时候想在主页做一个酷酷的导航菜单,于是就上网找灵感。有一个网站的导航栏给我的印象不错,于是就把网页保存下来想研究一下它的js代码,没想到的是竟然是用.NET的自定义控件生成的!上面的代码差点没把我看晕过去!(有兴趣的话可以试一试哦,里面N多变量的~~~汗),还好大三时学过c#(垃圾)加上它的控件可以试用,就下下来用了,感觉还真的不错,简单易用,可是~测试的时候差点没昏了!NND试用版的竟然只能再本机测试,别人的PC访问不但显示不了网页还警告说要注册购买!!!!大哥的竟然还要$(本少爷每月实习补助才1千¥啊),一怒之下决定自己封装一个。参考了树型菜单的js源码,花了3天时间,终于第一版写好了^_^
由于imags文件夹传不上来,所以菜单背景的切换效果显示不了^_^大家定制自己喜欢的样式^_^

运行代码框

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Phenix PanelBar</title><script language="javascript">/*--------------------------------------------------|| Phenix PanelBar | www.seu.edu.cn ||---------------------------------------------------|| || I believe one day I can fly like phenix! || || Finished: 17.11.2004 ||--------------------------------------------------*///item object//alert("arrived here");function PhenItem(id,pid,label,url,type,img,over,img2,over2,title,target){ this.id=id; this.pid=pid; this.label=label; this.url=url; this.title=title; this.target=target; this.img=img; this.over=over; this.img2=img2; this.over2=over2; this.type=type; //this._ih = false;//is it the head item? this._hc = false; //has the child item? this._ls = false;//has sibling item? this._io = false;//whether the panelbar is open?};//menu objectfunction PhenMenu(objName) { this.config = {closeSameLevel: true};//alert("asdsdf");this.obj = objName;this.items = [];this.root = new PhenItem(-1);};//add a new item to the item arrayPhenMenu.prototype.add = function(id,pid,label,url,type,img,over,img2,over2,title,target){this.items[this.items.length] = new PhenItem(id,pid,label,url,type,img,over,img2,over2,title,target);};// Outputs the menu to the pagePhenMenu.prototype.toString = function() {//alert("arrived here");var str = '<div>\n';if (document.getElementById) {str += this.addItem(this.root);} else str += 'Browser not supported.';str += '\n</div>'; //alert(str);//document.write(str);//alert(this.items[0]._hc);return str;};// Creates the menu structurePhenMenu.prototype.addItem = function(pItem) {var str = '';//var n=0;for (var n=0; n<this.items.length; n++) {if(this.items[n].pid == pItem.id){var ci = this.items[n];//alert(ci.pid);//alert(ci.id);this.setHS(ci);//alert("item:"+ci._hc);//alert(ci._ls);str += this.itemCreate(ci, n);if(ci._ls) break;}}return str;};// Creates the node icon, url and textPhenMenu.prototype.itemCreate = function(pItem, itemId) {//alert(pItem.type.toLowerCase());var str = ''; if(pItem.type == 'header') str = '<table width="100%" class="header" valign="middle" ><tr><td>';elsestr = '<table width="100%" class="item" valign="middle" ><tr><td>';if (pItem.img) {str += '  <img id="i' + this.obj + itemId + '" src="' + pItem.img + '" alt="" />';}if (pItem.url) {str += '<a id="s' + this.obj + itemId + '" class="navigation_item" href="' + pItem.url + '"';if (pItem.title) str += ' title="' + pItem.title + '"';if (pItem.target) str += ' target="' + pItem.target + '"';str += ' ';str += '>';}str += '    ' + pItem.label;if (pItem.url) str += '</a>';str += '</td></tr></table>';//alert(pItem.url);//alert(str);if (pItem._hc) {str += '<table id="ct' + this.obj + itemId + '" width="100%" style="display:' + ((pItem._io) ? 'block' : 'none') + '; FILTER: blendTrans(Duration=3.0); VISIBILITY: hidden"><tr><td>';str += this.addItem(pItem);str += '</td></tr></table>';//alert(str);//document.write(str);}return str;};// Checks whether a item has child and if it is the last siblingPhenMenu.prototype.setHS = function(pItem) {var lastId;for (var n=0; n<this.items.length; n++) {if (this.items[n].pid == pItem.id) pItem._hc = true;if (this.items[n].pid == pItem.pid) lastId = this.items[n].id;}if (lastId==pItem.id) pItem._ls = true;};// Toggle Open or closePhenMenu.prototype.o = function(id) {//alert(this.items.length);var ci = this.items[id]; //alert(ci);//this.setHS(ci);//alert(this.items[id]._hc);this.itemStatus(!ci._io, id);ci._io = !ci._io; if (this.config.closeSameLevel) this.closeLevel(ci);};// Change the status of a item(open or closed)PhenMenu.prototype.itemStatus = function(status, id) {cTable= document.getElementById('ct' + this.obj + id);if(status){cTable.filters.item(0).Apply();cTable.style.display = 'block';cTable.style.visibility = "";cTable.filters.item(0).Play();}elsecTable.style.display = 'none';//cDiv.style.display = (status) ? 'block': 'none';};// Closes all items on the same level as certain itemPhenMenu.prototype.closeLevel = function(pItem) { //alert(this.items[0]._hc);for (var n=0; n<this.items.length; n++) { //alert(this.items[n]._hc);if ((this.items[n].pid == pItem.pid) && (this.items[n].id != pItem.id) && this.items[n]._hc) {this.itemStatus(false, n);this.items[n]._io = false;this.closeAllChildren(this.items[n]);}}};PhenMenu.prototype.closeAllChildren = function(pItem) {for (var n=0; n<this.items.length; n++) {if (this.items[n].pid == pItem.id && this.items[n]._hc) {if (this.items[n]._io) this.itemStatus(false, n);this.items[n]._io = false;this.closeAllChildren(this.items[n]);}}};</script><style>.header {height:25px;FONT-FAMILY: Arial,Verdana;background-image:url(images/sideNavCategoryBg.gif);font-size:11px;color: #666666; }.headerSelected {height:25px;FONT-FAMILY: Arial,Verdana;background-image:url(images/sideNavCategorySelectedBg.gif);font-size:11px;background-repeat:repeat-x; COLOR: #333333;CURSOR: pointer;}.navigation_item {PADDING-LEFT: 20px; FONT-SIZE: 11px; CURSOR: pointer; COLOR: #000000; FONT-FAMILY: Arial,Verdana; HEIGHT: 20px; TEXT-DECORATION: none}.item { PADDING-LEFT: 2px; FONT-SIZE: 11px; CURSOR: pointer; COLOR: #000000; FONT-FAMILY: Arial,Verdana; HEIGHT: 20px; }.itemOver {PADDING-LEFT: 2px; FONT-SIZE: 11px; CURSOR: pointer; COLOR: #333333; FONT-FAMILY: Arial,Verdana; HEIGHT: 20px; font-weight:bold; background-color:#EDEDED}.itemSelected {PADDING-LEFT: 20px; FONT-SIZE: 11px; CURSOR: pointer; COLOR: #000000; FONT-FAMILY: Arial,Verdana; HEIGHT: 20px; TEXT-DECORATION: underline;}A.headerSelected {PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND-IMAGE: none; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; HEIGHT: 10px}</style></head><body><table width="221" border="0" cellspacing="0" cellpadding="0"> <tr> <td><p>Phenix panelbar</p><script type="text/javascript">p = new PhenMenu('p'); //alert("asds");p.add(0,-1,'label1凤凰','','header','e.gif');p.add(1,0,'label1.1凤凰','www.sina.com.cn');p.add(2,0,'label1.2','www.sina.com.cn');p.add(3,0,'label1.3','www.sina.com.cn');p.add(4,0,'label1.4','www.sina.com.cn');p.add(5,-1,'label2','','header','c.gif');p.add(6,5,'label2.1','www.seu.edu.cn');p.add(7,5,'label2.2','www.seu.edu.cn');p.add(8,5,'label2.3','www.seu.edu.cn');p.add(9,5,'label2.4','www.seu.edu.cn');p.add(10,-1,'label3','','header','m.gif');p.add(11,10,'label3.1','www.seu.edu.cn');p.add(12,10,'label3.2','www.seu.edu.cn');p.add(13,10,'label3.3','www.seu.edu.cn');p.add(14,10,'label3.4','www.seu.edu.cn');p.add(15,-1,'label4','','header','r.gif');p.add(16,15,'label4.1','www.seu.edu.cn');p.add(17,15,'label4.2','www.seu.edu.cn');p.add(18,15,'label4.3','www.seu.edu.cn');p.add(19,15,'label4.4','www.seu.edu.cn'); //alert(p.items.length)document.write(p);//p.toString(); //alert(p.items.length);//delete(p);</script></td> </tr></table></body></html>

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

PS:里面的script代码和style样式可以写在单独的js和css文件里。

时间: 2024-09-13 16:15:08

用javascript封装的导航菜单的相关文章

动态网站导航菜单:Javascript和jQuery导航菜单教程

文章简介:非常优秀的jQuery+CSS实现动态导航菜单教程. 导航栏是一个网站最常使用的部分之一,用户可以通过它有序地访问网页并返回到主页.这就要求导航栏一定要简单.易用,不要让用户在浏览网站过程中迷失.接下来我们要谈的是其下的导航菜单设计.导航菜单不宜设计成过分花哨,产生令人厌烦的感觉.但也要追求赏心悦目,同时一定要做到方便查找.现在,您可以利用Javascript和jQuery技术设计出不同的导航菜单,本篇文章收集了一些相关教程. 最后,值得提醒的是不要过分使用动态菜单,不要过分复杂,这样

用Javascript制作旋转导航菜单

你见过这样的导航菜单吗?导航菜单围绕着网站Logo不停地旋转,而一旦你把鼠标移到菜单上,旋转立即停止,在显示网站logo的地方显示出这个菜单链接的内容简介,点击链接将链接到指定的网页.一旦你的鼠标离开菜单,导航菜单又继续不停地旋转.你看这种导航菜单是不是既吸引人又贴近用户.本文例子如下图所示.是不是想在自已的网页上也放上一个,其实制作起来也不太难. 制作思路:要使页面的内容旋转起来,用图层和Javascript程序是肯定的了,要使图层的运动轨迹是一个圆,这要用到圆的参数方程,这是一个数学问题,不

Javascript创建折叠式导航菜单

javascript|菜单|创建|导航 <SCRIPT LANGUAGE="JavaScript"> <!-- Begin function formHandler() { var URL = document.form.site.options [document.form.site.selectedIndex].value; window.location.href = URL; // End --> } </SCRIPT> 那在网页上如何调用呢

麦鸡的TAB切换功能结合了javascript和css_导航菜单

这类型东西网上多的是,但朋友说我的程序程序理念好(嘻-),我也写一个tab切换,厚着脸皮把它叫麦鸡的TAB切换(汗一把先.),转载也请注明麦鸡的博客,下面就开始了 做个滑动门,需要一个图片 CSS 复制代码 代码如下: .nav{position:relative}  .nav dt{float:left; margin:0 2px 0 0; position:relative; z-index:2}  .nav dt a{color:#555; text-decoration:none}  .

超酷的鼠标拖拽翻页(分页)效果实现javascript代码_导航菜单

2009-4-9 12:35http://www.jb51.net 2009-4-9 12:35啊!停不住的爱人 2009-4-9 12:35宁静温泉 2009-4-9 12:35你的样子 2009-4-9 12:35恋曲1980 2009-4-9 12:35恋曲1990 2009-4-9 12:35恋曲2000 2009-4-9 12:35亚细亚的孤儿 2009-4-9 12:35伴侣 2009-4-9 12:35童年 2009-4-9 12:35 2009-4-9 12:35爱人同志 200

20个优秀的JavaScript导航菜单

JavaScript允许你在网页中添加交互和反馈,使得用户体验更棒也更直观.本文将为大家介绍20个基于JavaScript的导航菜单.要记住如果客户端浏览器关闭了JavaScript(平均有5%的用户通过W3 web statistics关闭了JS),这些技巧中的几个可能不能正常工作. 在这篇文章中,你将发现一些非常棒的.独特的JavaScript导航技巧和实例.点击图片直接跳转到导航菜单演示页面,点击该菜单名称则跳转到其开发项目组网页上. 1. MenuMatic 这个实例包含根据首字母排序或

javascript实现带下拉子菜单的导航菜单效果

  本文实例讲述了javascript实现带下拉子菜单的导航菜单效果.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

JavaScript实战之带收放动画效果的导航菜单_javascript技巧

虽然有很多插件可用,但为了共同提高,我做了一系列JavaScript实战系列的实例,分享给大家,前辈们若有好的建议,请务必指出,免得误人子弟啊! 今天是第一战:带收放动画效果的菜单,效果如下图:(样式有点丑(-^-))  ( 由于在写本文时,用的编辑器不同,暂时添加不了演示效果,这里有:最终完整代码和演示 )  动画效果:鼠标hover改变所有目标的背景和字体颜色,鼠标移动到'首页导航',显示下面的分组菜单,分组菜单有子菜单,点击可缩放,带动画过度效果!而且,可以随便添加和删除导航菜单和子菜单,

javascript 树形导航菜单实例代码_javascript技巧

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu