一個簡單的仿xp的js下拉菜單

一個簡單的仿xp的js下拉菜單
?
border-bottom: #08246b 1px solid;

background-color: #b5bed6;

}

DIV.SubMenu TD

{

font-size: 14px;

padding-top: 2px;

}

xp_menu.js(.js包含文件)
<!--

// menu source code

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 以下爲建立菜單的部分

//_______________________________________

//菜單條的結構

function menu_bar(name,ico,text,key,tip,skey,type,cmd) {

this.name = name; //名稱

this.ico = ico; //圖標

this.text = text; //文字

this.key = key; //熱鍵

this.tip = tip; //提示

this.skey = skey; //快捷鍵

this.type = type; //命令類型,0爲彈出下級菜單,1爲執行一個命令(跳轉到另一個文件)

this.cmd = cmd; //下級菜單的名稱或命令字符串,根據type的值而定

}

//菜單的結構

function menu(name) {

this.name = name; //名稱

this.bar = new Array(); //所包含的菜單條數組

}

//輸出一已定義的主菜單,橫排的

function popMainMenu(menu,left,top,width,height) {

var strHTML, posLeft, posTop, i;

strHTML = "<div id="http://www.chinaitpower.com/A/2003-09-13/" + menu.name + "' style='left:" + left + ";top:" + top + ";width:" + width + ";height:" + height + "' class='MainMenuBG'>"

document.write (strHTML);

posLeft = 2;

posTop = 1;

for (i=0;i<menu.bar.length;i++) {

strHTML = "<div id="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].name + "' nowrap style='left:" + posLeft + ";top:" + posTop + ";' class='MainMenu' " +

"οnmοuseοver='return menu_onmouseover(this,/"" + menu.bar[i].cmd + "/")' οnmοuseοut='return menu_onmouseout(this)' " +

"οnclick='return menu_onclick(this,/"" + menu.bar[i].cmd + "/")' title="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].tip + "'>" + menu.bar[i].text;

if (menu.bar[i].key!="") {

strHTML += "(<u>" + menu.bar[i].key + "</u>)";

}

strHTML += "</div>";

document.write (strHTML);

posLeft += document.all.item(menu.bar[i].name).offsetWidth + 1;

}

strHTML = "</div>";

document.write (strHTML);

}

//輸出一個已定義的子菜單,豎排的

function popSubMenu(menu) {

var strHTML, posLeft, posTop, i;

strHTML = "<div id="http://www.chinaitpower.com/A/2003-09-13/" + menu.name + "' style='left:20;top:30;width:244;height:300;' class='SubMenuBG'>"

document.write (strHTML);

posLeft = 1;

posTop = 1;

for (i=0;i<menu.bar.length;i++) {

if (menu.bar[i].name!="/-") { //如果名稱不是“/-”,表示是一個普通菜單條

strHTML = "<div id="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].name + "' style='left:" + posLeft + ";top:" + posTop + ";' class='SubMenu' " +

"title="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].tip + "' " +

"οnmοuseοver='return bar_onmouseover(this," + menu.bar[i].type + ",/"" + menu.bar[i].cmd + "/")' " +

"οnmοuseοut='return bar_onmouseout(this," + menu.bar[i].type + ",/"" + menu.bar[i].cmd + "/")' " +

"οnclick='return bar_onclick(this," + menu.bar[i].type + ",/"" + menu.bar[i].cmd + "/")'>" +

" <table border=0 cellspacing=0 cellpadding=0 width=240>" +

" <tr>" +

" <td nowrap align=center width=20 id="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].name + "_ico' class='ico'>";

if (menu.bar[i].ico!="") {

strHTML += "<img border=0 width=16 height=16 src="http://www.chinaitpower.com/A/2003-09-13/" + menu.bar[i].ico + "'>";

}else {

strHTML += "&nbsp;";

}

strHTML += "</td>" +

" <td nowrap id='" + menu.bar[i].name + "_text' class='text'>" + menu.bar[i].text;

if (menu.bar[i].key!="") { strHTML = strHTML + "(<u>" + menu.bar[i].key + "</u>)"; }

strHTML += "</td>" +

"<td nowrap align=right id='" + menu.bar[i].name + "_skey' class='skey'>";

if (menu.bar[i].skey!="") {

strHTML += menu.bar[i].skey;

}else {

strHTML += "&nbsp;";

}

strHTML += " </td>" +

" <td nowrap align=center width=20 id='" + menu.bar[i].name + "_sub' class='sub'>";

if (menu.bar[i].type==0) {

strHTML += "→";

}else {

strHTML += "&nbsp;&nbsp;";

}

strHTML += "</td>" +

" </tr>" +

" </table>" +

"</div>";

document.write (strHTML);

posTop += document.all.item(menu.bar[i].name).offsetHeight;

}else { //如果名稱是“/-”,表示是一條分隔線

strHTML = "<div style='left:" + posLeft + ";top:" + posTop + ";' class='SubMenu'>" +

" <table border=0 cellpadding=0 cellspacing=0 width=240>" +

" <tr>" +

" <td nowrap style='background-color: #dedbd6;' width=21></td>" +

" <td nowrap style='padding-left:5px;padding-top:1px;padding-bottom:1px;'>" +

" <table border=0 cellpadding=0 cellspacing=0 width=100%>" +

" <tr><td height=1 bgcolor='#636563'></td></tr>" +

" </table>" +

" </td>" +

" </tr>" +

" </table>" +

"</div>";

document.write (strHTML);

posTop += 3;

}

}

strHTML = "</div>"

document.write (strHTML);

document.all.item(menu.name).style.height = posTop+3; //重設子菜單背景框

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 以下爲操縱菜單的部分

//_________________________________________________

function showMenu(menu,submenu) { //顯示一級子菜單

document.all.item(submenu).style.left = menu.parentElement.offsetLeft + menu.offsetLeft + 1; //設置子菜單位置

document.all.item(submenu).style.top = menu.parentElement.offsetTop + menu.offsetTop + menu.offsetHeight -1; //設置子菜單的位置

document.all.item(submenu).style.visibility = "visible"; //顯示子菜單

mnuPrev[mnuPrev.length] = new menuinfo(submenu,1); //將新打開的子菜單的ID加入當前顯示菜單ID數組

}

function showSubMenu(menu,submenu) { //顯示二級及以下子菜單

document.all.item(submenu).style.left = menu.parentElement.offsetLeft + menu.offsetLeft + menu.offsetWidth + 2; //設置子菜單位置
document.all.item(submenu).style.top = menu.parentElement.offsetTop + menu.offsetTop + 1; //設置子菜單的位置

if (document.all.item(submenu).offsetLeft + document.all.item(submenu).offsetWidth > doc_width) {

document.all.item(submenu).style.left = menu.parentElement.offsetLeft - document.all.item(submenu).offsetWidth + 1;

}

if (document.all.item(submenu).offsetTop + document.all.item(submenu).offsetHeight > doc_height) {

document.all.item(submenu).style.top = document.all.item(submenu).offsetTop + menu.offsetHeight - document.all.item(submenu).offsetHeight + 2;

}

document.all.item(submenu).style.visibility = "visible"; //顯示子菜單

mnuPrev[mnuPrev.length] = new menuinfo(submenu,1); //將新打開的子菜單的ID加入當前顯示菜單ID數組

}

function showstatus() { //測試階段用的函數,顯示當前菜單ID數組內的內容

lblMsg.innerText = "";

for(var i=0;i<mnuPrev.length;i++) {

lblMsg.innerText += mnuPrev[i].id + " > ";

}

}

function menuinfo(id,type) {

this.id = id; //0表示菜單項,1表示菜單框

this.type = type;

}

function menu_onmouseover(obj,cmd) {

if(!mClick) {

obj.className = "MainMenuOver";

mnuPrev[mnuPrev.length] = new menuinfo(obj.id,0); //將當前的菜單ID壓入當前菜單ID數組

//showstatus(); //調試階段使用

}else {

if (mnuPrev[0].id == obj.id) { return false; } //如果是在本身上移動,不作爲

document.all.item(mnuPrev[0].id).className = "MainMenu";

for (var i=1;i<mnuPrev.length;i++) {

if (mnuPrev[i].type==0) { //如果是菜單項,設置成默認樣式

document.all.item(mnuPrev[i].id + "_ico").className = "ico";

document.all.item(mnuPrev[i].id + "_text").className = "text";

document.all.item(mnuPrev[i].id + "_skey").className = "skey";

document.all.item(mnuPrev[i].id + "_sub").className = "sub";

}else { //如果是菜單框,隱藏它

document.all.item(mnuPrev[i].id).style.visibility = "hidden";

}

}

mnuPrev.length = 0;

obj.className = "MainMenuClick";

mnuPrev[mnuPrev.length] = new menuinfo(obj.id,0);

showMenu(obj,cmd);

//showstatus(); //調試階段使用

}

}

function menu_onmouseout(obj) {

if(!mClick) {

obj.className = "MainMenu";

mnuPrev.length --; //清除最後一個壓入當前菜單ID數組的菜單ID

//showstatus(); //調試階段使用

}

}

function menu_onclick(obj,cmd) {

if(!mClick) { //如果菜單當前狀態是非點擊狀態,證明當前是從非點擊狀態到點擊狀態

obj.className = "MainMenuClick"; //設置當前菜單爲鼠標單擊之後的狀態

showMenu(obj,cmd); //顯示子菜單

//showstatus(); //調試階段使用

mClick = true; //設置菜單當前是點擊狀態

}else {

obj.className = "MainMenuOver"; //設置當前菜單爲鼠標移動上面的狀態,非點擊狀態

document.all.item(mnuPrev[mnuPrev.length-1].id).style.visibility = "hidden";

mnuPrev.length --;

//showstatus(); //調試階段使用

mClick = false; //主菜單當前是非點擊狀態

}

bMenuClick = true; //在一個菜單上單擊後設置其狀態爲true,用來屏蔽document_click事件

}

function bar_onmouseover(obj,type,cmd) {

for (var i=1;i<mnuPrev.length;i++) {

if(mnuPrev[i].id==obj.parentElement.id) {

for (var j=i+1;j<mnuPrev.length;j++) { //處理由前一個菜單項打開的子菜單,可能有多層

if (mnuPrev[j].type==0) { //如果是菜單項,設置成默認樣式

document.all.item(mnuPrev[j].id + "_ico").className = "ico";

document.all.item(mnuPrev[j].id + "_text").className = "text";

document.all.item(mnuPrev[j].id + "_skey").className = "skey";

document.all.item(mnuPrev[j].id + "_sub").className = "sub";

}else { //如果是菜單框,隱藏它

document.all.item(mnuPrev[j].id).style.visibility = "hidden";

}

}

mnuPrev.length = i + 1;

break;

}

}

mnuPrev[mnuPrev.length] = new menuinfo(obj.id,0);

//showstatus(); //調試階段使用

document.all.item(obj.id + "_ico").className = "icoOver";

document.all.item(obj.id + "_text").className = "textOver";

document.all.item(obj.id + "_skey").className = "skeyOver";

document.all.item(obj.id + "_sub").className = "subOver";

if (type==0) { showSubMenu(obj,cmd); } //如果有下一級菜單就展開

//showstatus(); //調試階段使用

}

function bar_onmouseout(obj,type,cmd) {

if (type!=0) {

document.all.item(obj.id + "_ico").className = "ico";

document.all.item(obj.id + "_text").className = "text";

document.all.item(obj.id + "_skey").className = "skey";

document.all.item(obj.id + "_sub").className = "sub";

if (mnuPrev.length>0) {

mnuPrev.length --;

}

//showstatus(); //調試階段使用

}

}

function bar_onclick(obj,type,cmd) {

if (type==1) {

//window.navigate(cmd); //跳轉到相應的文件

lblOutput.innerText = cmd; //演示期間,將文件名顯示出來

}else {

bMenuClick = true; //在一個菜單上單擊後設置其狀態爲true,用來屏蔽document_click事件

}

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 以下爲與主文件有關的控制部分,具體使用時需要關注的也僅僅這部分而已

//_____________________________________________________________

var doc_width; //當前窗口的寬度,隨窗口大小改變而改變

var doc_height; //當前窗口的高度,隨窗口大小改變而改變

var mClick = false; //一級菜單是否被點擊,初始一級菜單是未被點擊狀態

var bMenuClick = false; //單擊是否是在一個菜單上,初始單擊不是在一個菜單上

var mnuPrev = new Array(); //當前顯示的菜單ID數組,初始爲空

function document_onselectstart() {

return false; //屏蔽內容選擇功能

}

function document_onclick() {

if(!bMenuClick) {

if (mnuPrev.length>0) {

for (var i=1;i<mnuPrev.length;i++) {

if (mnuPrev[i].type==0) { //如果是菜單項,設置成默認樣式

document.all.item(mnuPrev[i].id + "_ico").className = "ico";

document.all.item(mnuPrev[i].id + "_text").className = "text";

document.all.item(mnuPrev[i].id + "_skey").className = "skey";

document.all.item(mnuPrev[i].id + "_sub").className = "sub";

}else { //如果是菜單框,隱藏它

document.all.item(mnuPrev[i].id).style.visibility = "hidden";

}

}

document.all.item(mnuPrev[0].id).className = "MainMenu"; //將主菜單的狀態恢復普通狀態

}

mnuPrev.length = 0; //清空當前顯示菜單

mClick = false; //清除菜單點擊狀態

}else {

bMenuClick = false;

}

}

function window_onresize() {

//當窗口尺寸變化時改變相應變量的值

doc_height = window.document.body.offsetHeight;

doc_width = window.document.body.offsetWidth;

}

function window_onload() {

//初始化窗口尺寸

doc_height = window.document.body.offsetHeight;

doc_width = window.document.body.offsetWidth;

}

//-->

 

發佈了27 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章