天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript CSS菜單功能 改進版

改進版本優(yōu)化了這個問題,通過簡單的Javascript代碼就可以增加菜單。同時使得HTML頁面非常簡潔,只需要寫2行代碼即可!O(∩_∩)O
1.使用前提,在HTML頁面中引入一個CSS文件,和一個JavaScript文件。如下: 
復制代碼 代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Menu</TITLE>
<link type="text/css" rel="stylesheet" href="menu.css">
</HEAD>
<BODY>
<div><script src="menu.js"></script></div>
</BODY>
</HTML>

引入CSS文件:<link type="text/css" rel="stylesheet" href="menu.css"> ,menu.css代碼見后
引入JavaScript文件:<script src="menu.js"></script>
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;
}
/* each menu item style */
#menubar li a {
border-style:none;
color:black;
display:block;
width:150px;
height:20px;
line-height:20px;
padding-left:10px;
text-decoration:none;
}
/* the first level menu which displays default */
#menubar .menuMain{
border-color:#C0C0C0;
border-width:1px;
border-style:solid;
}
/* the first leve style when mouse on it */
#menubar li a:hover{
background-color:#efefef;
text-decoration:underline;
}
/* the second level menu block style */
#menubar li ul{
background-color:#efefef;
border-style:none;
display:none;
position:absolute;
top:20px;
left:-40px;
margin-top:2px;
width:150px;
}
/* the sub menu item style when mouse on it */
#menubar li ul li a:hover {
text-decoration:underline;
padding-left:20px;
}
/* the third or more level menu block style */
#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';
}


/******************************************
* Funciont Name: MenuAbstractNode
* Description: MenuAbstractNode class
* @param {String} pText
* @param {String} pAction
* @Return:
*******************************************/
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;
}

/******************************************
* Funciont Name: toString
* Description: generate HTML code
* @param
* @param
* @Return:
*******************************************/
MenuAbstractNode.prototype.toString = function(){
var str = "<li id=/"" + this.id + "/" onmouseover=/"displaySubMenu(this)/" onmouseout=/"hideSubMenu(this)/"><a href=/"#/"";

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

var sb = [];

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

return str + "</li>" ;
}

/******************************************
* Funciont Name: Menu
* Description: Menu class
* @param {String} pText
* @param {String} pAction
* @param {String} pCssStyle
* @Return:
*******************************************/
function Menu(pText, pAction,pCssStyle){
this.base = MenuAbstractNode;
this.base(pText,pAction);

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

Menu.prototype = new MenuAbstractNode;

/******************************************
* Funciont Name: MenuItem
* Description: MenuItem class
* @param {String} pText
* @param {String} pAction
* @Return:
*******************************************/
function MenuItem(pText, pAction){
this.base = MenuAbstractNode;
this.base(pText,pAction);
this.type = "MenuItem";
}

MenuItem.prototype = new MenuAbstractNode;


/******************************************
* Funciont Name: Root
* Description: Root class
* @Return:
*******************************************/
function Root(){
this.id = "menubar";
this.childNodes=[];
}

Root.prototype = new MenuAbstractNode;

Root.prototype.toString = function(){
document.write("<div id='menu'><ul id=/""+root.id+"/"> </ul> </div>");
for(var i=0; i<this.childNodes.length; i++){
MenuHandler.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();
}

JavaScript技術JavaScript CSS菜單功能 改進版,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费精品一区二区三区在线观看 | 黄小飞二人转 | 99视频网站| 女攻男受高h全文肉肉 | 久久热在线视频精品1 | 大伊人青草狠狠久久 | 免费在线视频a | 菠萝菠萝蜜免费播放高清 | 嗯啊插的好深啊使劲抽视频 | 久久黄视频 | 手机伊在人线香蕉2 | 在线观看a视频 | 精品国产免费观看久久久 | 在线免费观看毛片 | 天天狠狠弄夜夜狠狠躁·太爽了 | 欧美亚洲日韩一道免费观看 | 99热在线视频| 亚洲无遮挡无码A片在线 | 97在线观看成人免费视频 | 国产精品亚洲精品久久国语 | 涩涩涩涩爱网站 | 午夜福利92看看电影80 | 99久久无码一区人妻A片蜜 | 不卡无线在一二三区 | 久久伊人久久 | 一级做a爰片久久毛片潮喷动漫 | 少妇被躁爽到高潮无码久久 | 99re.05久久热最新地址 | 伊人久99久女女视频精品免 | 欧美日韩亚洲一区二区三区在线观看 | 色老头色老太aaabbb | 最近2019中文字幕免费版视频 | 365电影成人亚洲网在线观看 | 把腿张开再深点好爽宝贝 | 歪歪漫画羞羞漫画国产 | 成人国产亚洲欧美成人综合网 | 日韩亚洲欧美中文高清在线 | 麻豆AV久久无码精品九九 | 69精品国产人妻蜜桃国产毛片 | 快播金瓶梅 | 99在线观看视频免费 |