栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

CSS JavaScript 实现菜单功能 改进版

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CSS JavaScript 实现菜单功能 改进版

改进版本优化了这个问题,通过简单的Javascript代码就可以增加菜单。同时使得HTML页面非常简洁,只需要写2行代码即可!O(∩_∩)O
1.使用前提,在HTML页面中引入一个CSS文件,和一个Javascript文件。如下:
复制代码 代码如下:



Menu







引入CSS文件: ,menu.css代码见后
引入Javascript文件:
2.定义菜单代码如下:
复制代码 代码如下:
if (document.getElementById){
var root = new Root();

var m1 = new Menu("File","alert(this.innerText);");
root.add(m1);
var m11 = new MenuItem("New");
m1.add(m11);
m1.add(new MenuItem("Open","alert('open file');"));
var m12 = new MenuItem("Save");
m1.add(m12);
m1.add(new MenuItem("Save As"));
m1.add(new MenuItem("Close"));
m1.add(new MenuItem(""));

var m2 = new Menu("Edit");
root.add(m2);

root.toString();
}

说明:
1) var root = new Root();
root.toString();
固定格式
2)声明菜单:
var m1 = new Menu("File","alert(this.innerText);");
菜单显示的名称为“File”,onclick事件为alert(this.innerText);
root.add(m1);
第一级菜单(即页面初始显示的菜单)放到root之下,通过add()方法
var m11 = new MenuItem("New"");
m1.add(m11);
声明“File”的子菜单“New”
m1.add(new MenuItem("Open","alert('open file');"));
声明“File”的子菜单“Open”
通过上面的代码即可完成菜单的添加功能。
代码文件:
<1> menu.css 
复制代码 代码如下:
#menubar {
font-family:verdana;
font-size:12px;
margin:1px;
}
#menubar li {
float:left;
position:relative;
text-align:left;
}

#menubar li a {
border-style:none;
color:black;
display:block;
width:150px;
height:20px;
line-height:20px;
padding-left:10px;
text-decoration:none;
}

#menubar .menuMain{
border-color:#C0C0C0;
border-width:1px;
border-style:solid;
}

#menubar li a:hover{
background-color:#efefef;
text-decoration:underline;
}

#menubar li ul{
background-color:#efefef;
border-style:none;
display:none;
position:absolute;
top:20px;
left:-40px;
margin-top:2px;
width:150px;
}

#menubar li ul li a:hover {
text-decoration:underline;
padding-left:20px;
}

#menubar li ul li ul {
display:none;
position:absolute;
top:0px;
left:150px;
margin-top:0;
margin-left:0;
width:150px;
}

<2>menu.js
复制代码 代码如下:
var MenuConfig = {
defaultText : "Menu Item",
defaultAction : "javascript:void(0);" ,
defaultMenuCssStyle : "menuMain"
};

var MenuHandler = {
idCounter : 0,
idPrefix : "menu-",
getId : function(){ return this.idPrefix + this.idCounter++ ;},
insertHTMLBeforeEnd : function(node, sHTML){
if(node.insertAdjacentHTML != null){
node.insertAdjacentHTML('BeforeEnd',sHTML);
return;
}
var df; // documentFragment
var r = node.ownerdocument.createRange();
r.selectNodeContents(node);
r.collapse(false);
df = r.createContextualFragment(sHTML);
node.appendChild(df);
}
}

function displaySubMenu(li){
var subMenu = li.getElementsByTagName('ul')[0];
if(subMenu)
subMenu.style.display = 'block';
}

function hideSubMenu(li){
var subMenu = li.getElementsByTagName('ul')[0];
if(subMenu)
subMenu.style.display = 'none';
}



function MenuAbstractNode(pText, pAction){
this.text = pText || MenuConfig.defaultText;
this.action = pAction || MenuConfig.defaultAction;
this.id = MenuHandler.getId();

this.childNodes = [];
}

MenuAbstractNode.prototype.add = function(node){
this.childNodes[this.childNodes.length] = node;
}


MenuAbstractNode.prototype.toString = function(){
var str = "

  • if(this.type=="Menu"){
    str = str + " class="" + this.cssStyle + """;
    }
    str = str + " onclick=""+this.action+"">"+this.text+"";

    var sb = [];

    for (var i = 0; i < this.childNodes.length; i++) {
    sb[i] = this.childNodes[i].toString();
    }
    if(sb.length>0){
    str = str + "
      " + sb.join("") + "
    "
    }

    return str + "
  • " ;
    }


    function Menu(pText, pAction,pCssStyle){
    this.base = MenuAbstractNode;
    this.base(pText,pAction);

    this.type = "Menu";
    this.cssStyle = pCssStyle || MenuConfig.defaultMenuCssStyle;
    }

    Menu.prototype = new MenuAbstractNode;


    function MenuItem(pText, pAction){
    this.base = MenuAbstractNode;
    this.base(pText,pAction);
    this.type = "MenuItem";
    }

    MenuItem.prototype = new MenuAbstractNode;



    function Root(){
    this.id = "menubar";
    this.childNodes=[];
    }

    Root.prototype = new MenuAbstractNode;

    Root.prototype.toString = function(){
    document.write("
    ");
    for(var i=0; iMenuHandler.insertHTMLBeforeEnd(document.getElementById(root.id), this.childNodes[i].toString());
    }
    }

    if (document.getElementById){
    var root = new Root();

    var m1 = new Menu("File","alert(this.innerText);");
    root.add(m1);
    var m11 = new MenuItem("New","alert(this.innerText);");
    m1.add(m11);
    m1.add(new MenuItem("Open","alert('open file');"));
    var m12 = new MenuItem("Save");
    m1.add(m12);
    m1.add(new MenuItem("Save As"));
    m1.add(new MenuItem("Close"));
    m1.add(new MenuItem(""));

    var m2 = new Menu("Edit");
    root.add(m2);
    var m22 = new MenuItem("Select All");
    m2.add(m22);
    m2.add(new MenuItem("Cut"));
    m2.add(new MenuItem("Copy"));
    m2.add(new MenuItem("paste"));

    var m3 = new Menu("View");
    var m33 = new MenuItem("View List");
    m33.add(new MenuItem("Function List"));
    m3.add(m33);
    m3.add(new MenuItem("Tool Bar"));
    root.add(m3);
    root.toString();
    }
    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/118768.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号