Home Web Front-end JS Tutorial CSS JavaScript implements menu function improved version_navigation menu

CSS JavaScript implements menu function improved version_navigation menu

May 16, 2016 pm 06:57 PM
css javascript menu

The improved version optimizes this problem and allows you to add menus through simple Javascript code. At the same time, it makes the HTML page very concise, only needing to write 2 lines of code! O(∩_∩)O
1. The prerequisite is to introduce a CSS file and a JavaScript file into the HTML page. As follows:

Copy code The code is as follows:

<!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>

Introduce CSS file: <link type="text/css" rel ="stylesheet" href="menu.css">, see menu.css code below
Introduce JavaScript file: <script src="menu.js"></script>
2. Definition The menu code is as follows:
Copy code The code is as follows:

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();
}

Note:
1) var root = new Root();
root.toString();
Fixed Format
2) Declare the menu:
var m1 = new Menu("File","alert(this.innerText);");
The name displayed by the menu is "File", and the onclick event is alert( this.innerText);
root.add(m1);
The first-level menu (that is, the menu initially displayed on the page) is placed under root, and through the add() method
var m11 = new MenuItem( "New"");
m1.add(m11);
Declare the submenu "New" of "File"
m1.add(new MenuItem("Open","alert('open file' );"));
Declare the submenu "Open" of "File"
The menu addition function can be completed through the above code.
Code file:
<1> menu.css
Copy code The code is as follows:

#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
Copy code The code is as follows:

var MenuConfig = {
defaultText : "메뉴 항목",
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);
반환;
}
var df; // DocumentFragment
var r = node.ownerDocument.createRange();
r.selectNodeContents(노드);
r.collapse(false);
df = r.createContextualFragment(sHTML);
node.appendChild(df);
}
}

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

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


/******************************************
* 기능 이름: MenuAbstractNode
* 설명: MenuAbstractNode 클래스
* @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;
}

/******************************************
* 기능 이름: toString
* 설명: HTML 코드 생성
* @param
* @param
* @Return:
************************ **********************/
MenuAbstractNode.prototype.toString = function(){
var str = "<li id="" this.id "" onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)"><a href="#"";

if(this.type=="메뉴"){
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>" ;
}

/******************************************
* 기능명 : 메뉴
* 설명: 메뉴 클래스
* @param {String} pText
* @param {String} pAction
* @param {String} pCssStyle
* @Return:
**** ***************************************/
기능 메뉴(pText, pAction,pCssStyle){
this.base = MenuAbstractNode;
this.base(pText,pAction);

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

Menu.prototype = new MenuAbstractNode;

/******************************************
* 기능 이름: MenuItem
* 설명: MenuItem 클래스
* @param {String} pText
* @param {String} pAction
* @Return:
**************** *****************************/
function MenuItem(pText, pAction){
this.base = MenuAbstractNode;
this.base(pText,pAction);
this.type = "메뉴항목";
}

MenuItem.prototype = new MenuAbstractNode;


/******************************************
* 기능 이름: 루트
* 설명: 루트 클래스
* @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("파일","alert(this.innerText);");
root.add(m1);
var m11 = new MenuItem("New","alert(this.innerText);");
m1.add(m11);
m1.add(new MenuItem("열기","alert('파일 열기');"));
var m12 = new MenuItem("저장");
m1.add(m12);
m1.add(new MenuItem("다른 이름으로 저장"));
m1.add(new MenuItem("닫기"));
m1.add(new MenuItem(""));

var m2 = new Menu("편집");
root.add(m2);
var m22 = new MenuItem("모두 선택");
m2.add(m22);
m2.add(new MenuItem("잘라내기"));
m2.add(new MenuItem("복사"));
m2.add(new MenuItem("붙여넣기"));

var m3 = new Menu("보기");
var m33 = new MenuItem("목록 보기");
m33.add(new MenuItem("함수 목록"));
m3.add(m33);
m3.add(new MenuItem("도구 모음"));
root.add(m3);
root.toString();
}
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What does placeholder mean in vue What does placeholder mean in vue May 07, 2024 am 09:57 AM

What does placeholder mean in vue

How to write spaces in vue How to write spaces in vue Apr 30, 2024 am 05:42 AM

How to write spaces in vue

How to get dom in vue How to get dom in vue Apr 30, 2024 am 05:36 AM

How to get dom in vue

What does span mean in js What does span mean in js May 06, 2024 am 11:42 AM

What does span mean in js

What does rem mean in js What does rem mean in js May 06, 2024 am 11:30 AM

What does rem mean in js

How to introduce images into vue How to introduce images into vue May 02, 2024 pm 10:48 PM

How to introduce images into vue

What is the function of span tag What is the function of span tag Apr 30, 2024 pm 01:54 PM

What is the function of span tag

What language is the browser plug-in written in? What language is the browser plug-in written in? May 08, 2024 pm 09:36 PM

What language is the browser plug-in written in?

See all articles