mm_menu.js(实现鼠标移入横向显示二级菜单效果)

mm_menu.js(实现鼠标移入横向显示二级菜单效果)

 

/**
* mm_menu 20MAR2002 Version 6.0
* Andy Finnell, March 2002
* Copyright (c) 2000-2002 Macromedia, Inc.
*
* based on menu.js
* by gary smith, July 1997
* Copyright (c) 1997-1999 Netscape Communications Corp.
*
* Netscape grants you a royalty free license to use or modify this
* software provided that this copyright notice appears on all copies.
* This software is provided "AS IS," without a warranty of any kind.
*/
function Menu(label, mw, mh, fnt, fs, fclr, fhclr, bg, bgh, halgn, valgn, pad, space, to, sx, sy, srel, opq, vert, idt, aw, ah)
{
this.version = "020320 [Menu; mm_menu.js]";//形式
this.type = "Menu";//类型
this.menuWidth = mw;//宽度
this.menuItemHeight = mh;//高度
this.fontSize = fs;//字体大小
this.fontWeight = "plain";//字体为普通
this.fontFamily = fnt;//字体父类
this.fontColor = fclr;//字体颜色
this.fontColorHilite = fhclr;//选中之后的加亮显示颜色
this.bgColor = "#555555";//背景颜色
this.menuBorder = 1;//边框
this.menuBgOpaque=opq;//透明度
this.menuItemBorder = 1;//选中的当前项边框
this.menuItemIndent = idt;//选中的当前项锯齿
this.menuItemBgColor = bg;//选中的当前项背景
this.menuItemVAlign = valgn;//垂直方式
this.menuItemHAlign = halgn;//水平方式
this.menuItemPadding = pad;//字周围间隔
this.menuItemSpacing = space;//字间距
this.menuLiteBgColor = "#ffffff";
this.menuBorderBgColor = "#777777";//边框颜色
this.menuHiliteBgColor = bgh;//高亮效果颜色
this.menuContainerBgColor = "#cccccc";
this.childMenuIcon = "arrows.gif";//子菜单图象
this.submenuXOffset = sx;//坐标值
this.submenuYOffset = sy;//坐标值
this.submenuRelativeToItem = srel;//相对
this.vertical = false;//垂直
this.items = new Array();//栏目
this.actions = new Array();
this.childMenus = new Array();//子栏目
this.hideOnMouseOut = true;//鼠标移出隐藏
this.hideTimeout = to;//隐藏时间
this.addMenuItem = addMenuItem;//添加栏目
this.writeMenus = writeMenus;//写栏目
this.MM_showMenu = MM_showMenu;
this.onMenuItemOver = onMenuItemOver;//栏目移入
this.onMenuItemAction = onMenuItemAction;//栏目动作
this.hideMenu = hideMenu;//隐藏栏目
this.hideChildMenu = hideChildMenu;//隐藏子栏目
if (!window.menus) window.menus = new Array();//如果桌面栏目不存在则声明新的栏目数组
this.label = " " + label;//标签
window.menus[this.label] = this;//将属性传递给栏目标签
window.menus[window.menus.length] = this;//将菜单数量传递给栏目
if (!window.activeMenus) window.activeMenus = new Array();//如果活动栏目不存在则声明新的活动栏目数组
}//创建栏目
function addMenuItem(label, action) {// 添加栏目
this.items[this.items.length] = label;//栏目数量
this.actions[this.actions.length] = action;//栏目动作
}
function FIND(item) {
if( window.mmIsOpera ) return(document.getElementById(item));
if (document.all) return(document.all[item]);
if (document.getElementById) return(document.getElementById(item));
return(false);
}
function writeMenus(container) {
if (window.triedToWriteMenus) return;
var agt = navigator.userAgent.toLowerCase();
window.mmIsOpera = agt.indexOf("opera") != -1;
if (!container && document.layers) {
   window.delayWriteMenus = this.writeMenus;
   var timer = setTimeout('delayWriteMenus()', 500);
   container = new Layer(100);
   clearTimeout(timer);
} else if (document.all || document.hasChildNodes || window.mmIsOpera) {
   document.writeln('<span id="menuContainer"></span>');
   container = FIND("menuContainer");
}
window.mmHideMenuTimer = null;
if (!container) return;
window.triedToWriteMenus = true;
container.isContainer = true;
container.menus = new Array();
for (var i=0; i<window.menus.length; i++)
   container.menus[i] = window.menus[i];
window.menus.length = 0;
var countMenus = 0;
var countItems = 0;
var top = 0;
var content = '';
var lrs = false;
var theStat = "";
var tsc = 0;
if (document.layers) lrs = true;
for (var i=0; i<container.menus.length; i++, countMenus++) {
   var menu = container.menus[i];
   if (menu.bgImageUp || !menu.menuBgOpaque) {
    menu.menuBorder = 0;
    menu.menuItemBorder = 0;
   }
   if (lrs) {
    var menuLayer = new Layer(100, container);
    var lite = new Layer(100, menuLayer);
    lite.top = menu.menuBorder;
    lite.left = menu.menuBorder;
    var body = new Layer(100, lite);
    body.top = menu.menuBorder;
    body.left = menu.menuBorder;
   } else {
    content += ''+
    '<div id="menuLayer'+ countMenus +'" style="position:absolute;z-index:1;left:10px;top:'+ (i * 100) +'px;visibility:hidden;color:' + menu.menuBorderBgColor + ';">/n'+
    ' <div id="menuLite'+ countMenus +'" style="position:absolute;z-index:1;left:'+ menu.menuBorder +'px;top:'+ menu.menuBorder +'px;visibility:hide;" οnmοuseοut="mouseoutMenu();">/n'+
    ' <div id="menuFg'+ countMenus +'" style="position:absolute;left:'+ menu.menuBorder +'px;top:'+ menu.menuBorder +'px;visibility:hide;">/n'+
    '';
   }
   var x=i;
   for (var i=0; i<menu.items.length; i++) {
    var item = menu.items[i];
    var childMenu = false;
    var defaultHeight = menu.fontSize+2*menu.menuItemPadding;
    if (item.label) {
     item = item.label;
     childMenu = true;
    }
    menu.menuItemHeight = menu.menuItemHeight || defaultHeight;
    var itemProps = '';
    if( menu.fontFamily != '' ) itemProps += 'font-family:' + menu.fontFamily +';';
    itemProps += 'font-weight:' + menu.fontWeight + ';fontSize:' + menu.fontSize + 'px;';
    if (menu.fontStyle) itemProps += 'font-style:' + menu.fontStyle + ';';
    if (document.all || window.mmIsOpera)
     itemProps += 'font-size:' + menu.fontSize + 'px;" οnclick="onMenuItemAction(null,this);';
    else if (!document.layers) {
     itemProps += 'font-size:' + menu.fontSize + 'px;';
    }
    var l;
    if (lrs) {
     var lw = menu.menuWidth;
     if( menu.menuItemHAlign == 'right' ) lw -= menu.menuItemPadding;
     l = new Layer(lw,body);
    }
    var itemLeft = 0;
    var itemTop = i*menu.menuItemHeight;
    if( !menu.vertical ) {
     itemLeft = i*menu.menuWidth;
     itemTop = 0;
    }
    var dTag = '<div id="menuItem'+ countItems +'" style="position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';
    var dClose = '</div>'
    if (menu.bgImageUp) dTag = '<div id="menuItem'+ countItems +'" style="background:url('+menu.bgImageUp+');position:absolute;left:' + itemLeft + 'px;top:'+ itemTop +'px;'+ itemProps +'">';
    var left = 0, top = 0, right = 0, bottom = 0;
    left = 1 + menu.menuItemPadding + menu.menuItemIndent;
    right = left + menu.menuWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
    if( menu.menuItemVAlign == 'top' ) top = menu.menuItemPadding;
    if( menu.menuItemVAlign == 'bottom' ) top = menu.menuItemHeight-menu.fontSize-1-menu.menuItemPadding;
    if( menu.menuItemVAlign == 'middle' ) top = ((menu.menuItemHeight/2)-(menu.fontSize/2)-1);
    bottom = menu.menuItemHeight - 2*menu.menuItemPadding;
    var textProps = 'position:absolute;left:' + left + 'px;top:' + top + 'px;';
    if (lrs) {
     textProps +=itemProps + 'right:' + right + ';bottom:' + bottom + ';';
     dTag = "";
     dClose = "";
    }
   
    if(document.all && !window.mmIsOpera) {
     item = '<div align="' + menu.menuItemHAlign + '">' + item + '</div>';
    } else if (lrs) {
     item = '<div style="text-align:' + menu.menuItemHAlign + ';">' + item + '</div>';
    } else {
     var hitem = null;
     if( menu.menuItemHAlign != 'left' ) {
      if(window.mmIsOpera) {
       var operaWidth = menu.menuItemHAlign == 'center' ? -(menu.menuWidth-2*menu.menuItemPadding) : (menu.menuWidth-6*menu.menuItemPadding);
       hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:' + menu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:'
        + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
       item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:' + menu.menuItemPadding + 'px;width:' + operaWidth + 'px;text-align:'
        + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
      } else {
       hitem = '<div id="menuItemHilite' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+menu.menuWidth-3*menu.menuItemPadding) + 'px;text-align:'
        + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
       item = '<div id="menuItemText' + countItems + 'Shim" style="position:absolute;top:1px;left:1px;right:-' + (left+menu.menuWidth-3*menu.menuItemPadding) + 'px;text-align:'
        + menu.menuItemHAlign + ';visibility:visible;">' + item + '</div>';
      }
     } else hitem = null;
    }
    if(document.all && !window.mmIsOpera) item = '<div id="menuItemShim' + countItems + '" style="position:absolute;left:0px;top:0px;">' + item + '</div>';
    var dText = '<div id="menuItemText'+ countItems +'" style="' + textProps + 'color:'+ menu.fontColor +';">'+ item +'&nbsp</div>/n'
       + '<div id="menuItemHilite'+ countItems +'" style="' + textProps + 'color:'+ menu.fontColorHilite +';visibility:hidden;">'
       + (hitem||item) +'&nbsp</div>';
    if (childMenu) content += ( dTag + dText + '<div id="childMenu'+ countItems +'" style="position:absolute;left:0px;top:3px;"><img src="'+ menu.childMenuIcon +'"></div>/n' + dClose);
    else content += ( dTag + dText + dClose);
    if (lrs) {
     l.document.open("text/html");
     l.document.writeln(content);
     l.document.close();
     content = '';
     theStat += "-";
     tsc++;
     if (tsc > 50) {
      tsc = 0;
      theStat = "";
     }
     status = theStat;
    }
    countItems++;
   }
   if (lrs) {
    var focusItem = new Layer(100, body);
    focusItem.visiblity="hidden";
    focusItem.document.open("text/html");
    focusItem.document.writeln("&nbsp;");
    focusItem.document.close();
   } else {
    content += '   <div id="focusItem'+ countMenus +'" style="position:absolute;left:0px;top:0px;visibility:hide;" οnclick="onMenuItemAction(null,this);">&nbsp;</div>/n';
    content += '   </div>/n </div>/n</div>/n';
   }
   i=x;
}
if (document.layers) {  
   container.clip.width = window.innerWidth;
   container.clip.height = window.innerHeight;
   container. = mouseoutMenu;
   container.menuContainerBgColor = this.menuContainerBgColor;
   for (var i=0; i<container.document.layers.length; i++) {
    proto = container.menus[i];
    var menu = container.document.layers[i];
    container.menus[i].menuLayer = menu;
    container.menus[i].menuLayer.Menu = container.menus[i];
    container.menus[i].menuLayer.Menu.container = container;
    var body = menu.document.layers[0].document.layers[0];
    body.clip.width = proto.menuWidth || body.clip.width;
    body.clip.height = proto.menuHeight || body.clip.height;
    for (var n=0; n<body.document.layers.length-1; n++) {
     var l = body.document.layers[n];
     l.Menu = container.menus[i];
     l.menuHiliteBgColor = proto.menuHiliteBgColor;
     l.document.bgColor = proto.menuItemBgColor;
     l.saveColor = proto.menuItemBgColor;
     l. = proto.onMenuItemOver;
     l.onclick = proto.onMenuItemAction;
     l.mmaction = container.menus[i].actions[n];
     l.focusItem = body.document.layers[body.document.layers.length-1];
     l.clip.width = proto.menuWidth || body.clip.width;
     l.clip.height = proto.menuItemHeight || l.clip.height;
     if (n>0) {
      if( l.Menu.vertical ) l.top = body.document.layers[n-1].top + body.document.layers[n-1].clip.height + proto.menuItemBorder + proto.menuItemSpacing;
      else l.left = body.document.layers[n-1].left + body.document.layers[n-1].clip.width + proto.menuItemBorder + proto.menuItemSpacing;
     }
     l.hilite = l.document.layers[1];
     if (proto.bgImageUp) l.background.src = proto.bgImageUp;
     l.document.layers[1].isHilite = true;
     if (l.document.layers.length > 2) {
      l.childMenu = container.menus[i].items[n].menuLayer;
      l.document.layers[2].left = l.clip.width -13;
      l.document.layers[2].top = (l.clip.height / 2) -4;
      l.document.layers[2].clip.left += 3;
      l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
     }
    }
    if( proto.menuBgOpaque ) body.document.bgColor = proto.bgColor;
    if( proto.vertical ) {
     body.clip.width = l.clip.width +proto.menuBorder;
     body.clip.height = l.top + l.clip.height +proto.menuBorder;
    } else {
     body.clip.height = l.clip.height +proto.menuBorder;
     body.clip.width = l.left + l.clip.width +proto.menuBorder;
     if( body.clip.width > window.innerWidth ) body.clip.width = window.innerWidth;
    }
    var focusItem = body.document.layers[n];
    focusItem.clip.width = body.clip.width;
    focusItem.Menu = l.Menu;
    focusItem.top = -30;
            focusItem.captureEvents(Event.MOUSEDOWN);
            focusItem. = onMenuItemDown;
    if( proto.menuBgOpaque ) menu.document.bgColor = proto.menuBorderBgColor;
    var lite = menu.document.layers[0];
    if( proto.menuBgOpaque ) lite.document.bgColor = proto.menuLiteBgColor;
    lite.clip.width = body.clip.width +1;
    lite.clip.height = body.clip.height +1;
    menu.clip.width = body.clip.width + (proto.menuBorder * 3) ;
    menu.clip.height = body.clip.height + (proto.menuBorder * 3);
   }
} else {
   if ((!document.all) && (container.hasChildNodes) && !window.mmIsOpera) {
    container.innerHTML=content;
   } else {
    container.document.open("text/html");
    container.document.writeln(content);
    container.document.close();
   }
   if (!FIND("menuLayer0")) return;
   var menuCount = 0;
   for (var x=0; x<container.menus.length; x++) {
    var menuLayer = FIND("menuLayer" + x);
    container.menus[x].menuLayer = "menuLayer" + x;
    menuLayer.Menu = container.menus[x];
    menuLayer.Menu.container = "menuLayer" + x;
    menuLayer.style.zindex = 1;
      var s = menuLayer.style;
    s.pixeltop = -300;
    s.pixelleft = -300;
    s.top = '-300px';
    s.left = '-300px';
    var menu = container.menus[x];
    menu.menuItemWidth = menu.menuWidth || menu.menuIEWidth || 140;
    if( menu.menuBgOpaque ) menuLayer.style.backgroundColor = menu.menuBorderBgColor;
    var top = 0;
    var left = 0;
    menu.menuItemLayers = new Array();
    for (var i=0; i<container.menus[x].items.length; i++) {
     var l = FIND("menuItem" + menuCount);
     l.Menu = container.menus[x];
     l.Menu.menuItemLayers[l.Menu.menuItemLayers.length] = l;
     if (l.addEventListener || window.mmIsOpera) {
      l.style.width = menu.menuItemWidth + 'px';
      l.style.height = menu.menuItemHeight + 'px';
      l.style.pixelWidth = menu.menuItemWidth;
      l.style.pixelHeight = menu.menuItemHeight;
      l.style.top = top + 'px';
      l.style.left = left + 'px';
      if(l.addEventListener) {
       l.addEventListener("mouseover", onMenuItemOver, false);
       l.addEventListener("click", onMenuItemAction, false);
       l.addEventListener("mouseout", mouseoutMenu, false);
      }
      if( menu.menuItemHAlign != 'left' ) {
       l.hiliteShim = FIND("menuItemHilite" + menuCount + "Shim");
       l.hiliteShim.style.visibility = "inherit";
       l.textShim = FIND("menuItemText" + menuCount + "Shim");
       l.hiliteShim.style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
       l.hiliteShim.style.width = l.hiliteShim.style.pixelWidth;
       l.textShim.style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
       l.textShim.style.width = l.textShim.style.pixelWidth;
      }
     } else {
      l.style.pixelWidth = menu.menuItemWidth;
      l.style.pixelHeight = menu.menuItemHeight;
      l.style.pixelTop = top;
      l.style.pixelLeft = left;
      if( menu.menuItemHAlign != 'left' ) {
       var shim = FIND("menuItemShim" + menuCount);
       shim[0].style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
       shim[1].style.pixelWidth = menu.menuItemWidth - 2*menu.menuItemPadding - menu.menuItemIndent;
       shim[0].style.width = shim[0].style.pixelWidth + 'px';
       shim[1].style.width = shim[1].style.pixelWidth + 'px';
      }
     }
     if( menu.vertical ) top = top + menu.menuItemHeight+menu.menuItemBorder+menu.menuItemSpacing;
     else left = left + menu.menuItemWidth+menu.menuItemBorder+menu.menuItemSpacing;
     l.style.fontSize = menu.fontSize + 'px';
     l.style.backgroundColor = menu.menuItemBgColor;
     l.style.visibility = "inherit";
     l.saveColor = menu.menuItemBgColor;
     l.menuHiliteBgColor = menu.menuHiliteBgColor;
     l.mmaction = container.menus[x].actions[i];
     l.hilite = FIND("menuItemHilite" + menuCount);
     l.focusItem = FIND("focusItem" + x);
     l.focusItem.style.pixelTop = -30;
     l.focusItem.style.top = '-30px';
     var childItem = FIND("childMenu" + menuCount);
     if (childItem) {
      l.childMenu = container.menus[x].items[i].menuLayer;
      childItem.style.pixelLeft = menu.menuItemWidth -11;
      childItem.style.left = childItem.style.pixelLeft + 'px';
      childItem.style.pixelTop = (menu.menuItemHeight /2) -4;
      childItem.style.top = childItem.style.pixelTop + 'px';
      l.Menu.childMenus[l.Menu.childMenus.length] = l.childMenu;
     }
     l.style.cursor = "hand";
     menuCount++;
    }
    if( menu.vertical ) {
     menu.menuHeight = top-1-menu.menuItemSpacing;
     menu.menuWidth = menu.menuItemWidth;
    } else {
     menu.menuHeight = menu.menuItemHeight;
     menu.menuWidth = left-1-menu.menuItemSpacing;
    }
    var lite = FIND("menuLite" + x);
    var s = lite.style;
    s.pixelHeight = menu.menuHeight +(menu.menuBorder * 2);
    s.height = s.pixelHeight + 'px';
    s.pixelWidth = menu.menuWidth + (menu.menuBorder * 2);
    s.width = s.pixelWidth + 'px';
    if( menu.menuBgOpaque ) s.backgroundColor = menu.menuLiteBgColor;
    var body = FIND("menuFg" + x);
    s = body.style;
    s.pixelHeight = menu.menuHeight + menu.menuBorder;
    s.height = s.pixelHeight + 'px';
    s.pixelWidth = menu.menuWidth + menu.menuBorder;
    s.width = s.pixelWidth + 'px';
    if( menu.menuBgOpaque ) s.backgroundColor = menu.bgColor;
    s = menuLayer.style;
    s.pixelWidth = menu.menuWidth + (menu.menuBorder * 4);
    s.width = s.pixelWidth + 'px';
    s.pixelHeight = menu.menuHeight+(menu.menuBorder*4);
    s.height = s.pixelHeight + 'px';
   }
}
if (document.captureEvents) document.captureEvents(Event.MOUSEUP);
if (document.addEventListener) document.addEventListener("mouseup", onMenuItemOver, false);
if (document.layers && window.innerWidth) {
   window.onresize = NS4resize;
   window.NS4sIW = window.innerWidth;
   window.NS4sIH = window.innerHeight;
   setTimeout("NS4resize()",500);
}
document. = mouseupMenu;
window.mmWroteMenu = true;
status = "";
}
function NS4resize() {
if (NS4sIW != window.innerWidth || NS4sIH != window.innerHeight) window.location.reload();
}
function onMenuItemOver(e, l) {
MM_clearTimeout();
l = l || this;
var a = window.ActiveMenuItem;
if (document.layers) {
   if (a) {
    a.document.bgColor = a.saveColor;
    if (a.hilite) a.hilite.visibility = "hidden";
    if (a.Menu.bgImageOver) a.background.src = a.Menu.bgImageUp;
    a.focusItem.top = -100;
    a.clicked = false;
   }
   if (l.hilite) {
    l.document.bgColor = l.menuHiliteBgColor;
    l.zIndex = 1;
    l.hilite.visibility = "inherit";
    l.hilite.zIndex = 2;
    l.document.layers[1].zIndex = 1;
    l.focusItem.zIndex = this.zIndex +2;
   }
   if (l.Menu.bgImageOver) l.background.src = l.Menu.bgImageOver;
   l.focusItem.top = this.top;
   l.focusItem.left = this.left;
   l.focusItem.clip.width = l.clip.width;
   l.focusItem.clip.height = l.clip.height;
   l.Menu.hideChildMenu(l);
} else if (l.style && l.Menu) {
   if (a) {
    a.style.backgroundColor = a.saveColor;
    if (a.hilite) a.hilite.style.visibility = "hidden";
    if (a.hiliteShim) a.hiliteShim.style.visibility = "inherit";
    if (a.Menu.bgImageUp) a.style.background = "url(" + a.Menu.bgImageUp +")";;
   }
   l.style.backgroundColor = l.menuHiliteBgColor;
   l.zIndex = 1;
   if (l.Menu.bgImageOver) l.style.background = "url(" + l.Menu.bgImageOver +")";
   if (l.hilite) {
    l.hilite.style.visibility = "inherit";
    if( l.hiliteShim ) l.hiliteShim.style.visibility = "visible";
   }
   l.focusItem.style.pixelTop = l.style.pixelTop;
   l.focusItem.style.top = l.focusItem.style.pixelTop + 'px';
   l.focusItem.style.pixelLeft = l.style.pixelLeft;
   l.focusItem.style.left = l.focusItem.style.pixelLeft + 'px';
   l.focusItem.style.zIndex = l.zIndex +1;
   l.Menu.hideChildMenu(l);
} else return;
window.ActiveMenuItem = l;
}
function onMenuItemAction(e, l) {
l = window.ActiveMenuItem;
if (!l) return;
hideActiveMenus();
if (l.mmaction) eval("" + l.mmaction);
window.ActiveMenuItem = 0;
}
function MM_clearTimeout() {
if (mmHideMenuTimer) clearTimeout(mmHideMenuTimer);
mmHideMenuTimer = null;
mmDHFlag = false;
}
function MM_startTimeout() {
if( window.ActiveMenu ) {
   mmStart = new Date();
   mmDHFlag = true;
   mmHideMenuTimer = setTimeout("mmDoHide()", window.ActiveMenu.Menu.hideTimeout);
}
}
function mmDoHide() {
if (!mmDHFlag || !window.ActiveMenu) return;
var elapsed = new Date() - mmStart;
var timeout = window.ActiveMenu.Menu.hideTimeout;
if (elapsed < timeout) {
   mmHideMenuTimer = setTimeout("mmDoHide()", timeout+100-elapsed);
   return;
}
mmDHFlag = false;
hideActiveMenus();
window.ActiveMenuItem = 0;
}
function MM_showMenu(menu, x, y, child, imgname) {
if (!window.mmWroteMenu) return;
MM_clearTimeout();
if (menu) {
   var obj = FIND(imgname) || document.images[imgname] || document.links[imgname] || document.anchors[imgname];
   x = moveXbySlicePos (x, obj);
   y = moveYbySlicePos (y, obj);
}
if (document.layers) {
   if (menu) {
    var l = menu.menuLayer || menu;
    l.top = l.left = 1;
    hideActiveMenus();
    if (this.visibility) l = this;
    window.ActiveMenu = l;
   } else {
    var l = child;
   }
   if (!l) return;
   for (var i=0; i<l.layers.length; i++) {      
    if (!l.layers[i].isHilite) l.layers[i].visibility = "inherit";
    if (l.layers[i].document.layers.length > 0) MM_showMenu(null, "relative", "relative", l.layers[i]);
   }
   if (l.parentLayer) {
    if (x != "relative") l.parentLayer.left = x || window.pageX || 0;
    if (l.parentLayer.left + l.clip.width > window.innerWidth) l.parentLayer.left -= (l.parentLayer.left + l.clip.width - window.innerWidth);
    if (y != "relative") l.parentLayer.top = y || window.pageY || 0;
    if (l.parentLayer.isContainer) {
     l.Menu.xOffset = window.pageXOffset;
     l.Menu.yOffset = window.pageYOffset;
     l.parentLayer.clip.width = window.ActiveMenu.clip.width +2;
     l.parentLayer.clip.height = window.ActiveMenu.clip.height +2;
     if (l.parentLayer.menuContainerBgColor && l.Menu.menuBgOpaque ) l.parentLayer.document.bgColor = l.parentLayer.menuContainerBgColor;
    }
   }
   l.visibility = "inherit";
   if (l.Menu) l.Menu.container.visibility = "inherit";
} else if (FIND("menuItem0")) {
   var l = menu.menuLayer || menu;
   hideActiveMenus();
   if (typeof(l) == "string") l = FIND(l);
   window.ActiveMenu = l;
   var s = l.style;
   s.visibility = "inherit";
   if (x != "relative") {
    s.pixelLeft = x || (window.pageX + document.body.scrollLeft) || 0;
    s.left = s.pixelLeft + 'px';
   }
   if (y != "relative") {
    s.pixelTop = y || (window.pageY + document.body.scrollTop) || 0;
    s.top = s.pixelTop + 'px';
   }
   l.Menu.xOffset = document.body.scrollLeft;
   l.Menu.yOffset = document.body.scrollTop;
}
if (menu) window.activeMenus[window.activeMenus.length] = l;
MM_clearTimeout();
}
function onMenuItemDown(e, l) {
var a = window.ActiveMenuItem;
if (document.layers && a) {
   a.eX = e.pageX;
   a.eY = e.pageY;
   a.clicked = true;
    }
}
function mouseupMenu(e) {
hideMenu(true, e);
hideActiveMenus();
return true;
}
function getExplorerVersion() {
var ieVers = parseFloat(navigator.appVersion);
if( navigator.appName != 'Microsoft Internet Explorer' ) return ieVers;
var tempVers = navigator.appVersion;
var i = tempVers.indexOf( 'MSIE ' );
if( i >= 0 ) {
   tempVers = tempVers.substring( i+5 );
   ieVers = parseFloat( tempVers );
}
return ieVers;
}
function mouseoutMenu() {
if ((navigator.appName == "Microsoft Internet Explorer") && (getExplorerVersion() < 4.5))
   return true;
hideMenu(false, false);
return true;
}
function hideMenu(mouseup, e) {
var a = window.ActiveMenuItem;
if (a && document.layers) {
   a.document.bgColor = a.saveColor;
   a.focusItem.top = -30;
   if (a.hilite) a.hilite.visibility = "hidden";
   if (mouseup && a.mmaction && a.clicked && window.ActiveMenu) {
     if (a.eX <= e.pageX+15 && a.eX >= e.pageX-15 && a.eY <= e.pageY+10 && a.eY >= e.pageY-10) {
     setTimeout('window.ActiveMenu.Menu.onMenuItemAction();', 500);
    }
   }
   a.clicked = false;
   if (a.Menu.bgImageOver) a.background.src = a.Menu.bgImageUp;
} else if (window.ActiveMenu && FIND("menuItem0")) {
   if (a) {
    a.style.backgroundColor = a.saveColor;
    if (a.hilite) a.hilite.style.visibility = "hidden";
    if (a.hiliteShim) a.hiliteShim.style.visibility = "inherit";
    if (a.Menu.bgImageUp) a.style.background = "url(" + a.Menu.bgImageUp +")";
   }
}
if (!mouseup && window.ActiveMenu) {
   if (window.ActiveMenu.Menu) {
    if (window.ActiveMenu.Menu.hideOnMouseOut) MM_startTimeout();
    return(true);
   }
}
return(true);
}
function hideChildMenu(hcmLayer) {
MM_clearTimeout();
var l = hcmLayer;
for (var i=0; i < l.Menu.childMenus.length; i++) {
   var theLayer = l.Menu.childMenus[i];
   if (document.layers) theLayer.visibility = "hidden";
   else {
    theLayer = FIND(theLayer);
    theLayer.style.visibility = "hidden";
    if( theLayer.Menu.menuItemHAlign != 'left' ) {
     for(var j = 0; j < theLayer.Menu.menuItemLayers.length; j++) {
      var itemLayer = theLayer.Menu.menuItemLayers[j];
      if(itemLayer.textShim) itemLayer.textShim.style.visibility = "inherit";
     }
    }
   }
   theLayer.Menu.hideChildMenu(theLayer);
}
if (l.childMenu) {
   var childMenu = l.childMenu;
   if (document.layers) {
    l.Menu.MM_showMenu(null,null,null,childMenu.layers[0]);
    childMenu.zIndex = l.parentLayer.zIndex +1;
    childMenu.top = l.Menu.menuLayer.top + l.Menu.submenuYOffset;
    if( l.Menu.vertical ) {
     if( l.Menu.submenuRelativeToItem ) childMenu.top += l.top + l.parentLayer.top;
     childMenu.left = l.parentLayer.left + l.parentLayer.clip.width - (2*l.Menu.menuBorder) + l.Menu.menuLayer.left + l.Menu.submenuXOffset;
    } else {
     childMenu.top += l.top + l.parentLayer.top;
     if( l.Menu.submenuRelativeToItem ) childMenu.left = l.Menu.menuLayer.left + l.left + l.clip.width + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
     else childMenu.left = l.parentLayer.left + l.parentLayer.clip.width - (2*l.Menu.menuBorder) + l.Menu.menuLayer.left + l.Menu.submenuXOffset;
    }
    if( childMenu.left < l.Menu.container.clip.left ) l.Menu.container.clip.left = childMenu.left;
    var w = childMenu.clip.width+childMenu.left-l.Menu.container.clip.left;
    if (w > l.Menu.container.clip.width) l.Menu.container.clip.width = w;
    var h = childMenu.clip.height+childMenu.top-l.Menu.container.clip.top;
    if (h > l.Menu.container.clip.height) l.Menu.container.clip.height = h;
    l.document.layers[1].zIndex = 0;
    childMenu.visibility = "inherit";
   } else if (FIND("menuItem0")) {
    childMenu = FIND(l.childMenu);
    var menuLayer = FIND(l.Menu.menuLayer);
    var s = childMenu.style;
    s.zIndex = menuLayer.style.zIndex+1;
    if (document.all || window.mmIsOpera) {
     s.pixelTop = menuLayer.style.pixelTop + l.Menu.submenuYOffset;
     if( l.Menu.vertical ) {
      if( l.Menu.submenuRelativeToItem ) s.pixelTop += l.style.pixelTop;
      s.pixelLeft = l.style.pixelWidth + menuLayer.style.pixelLeft + l.Menu.submenuXOffset;
      s.left = s.pixelLeft + 'px';
     } else {
      s.pixelTop += l.style.pixelTop;
      if( l.Menu.submenuRelativeToItem ) s.pixelLeft = menuLayer.style.pixelLeft + l.style.pixelLeft + l.style.pixelWidth + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
      else s.pixelLeft = (menuLayer.style.pixelWidth-4*l.Menu.menuBorder) + menuLayer.style.pixelLeft + l.Menu.submenuXOffset;
      s.left = s.pixelLeft + 'px';
     }
    } else {
     var top = parseInt(menuLayer.style.top) + l.Menu.submenuYOffset;
     var left = 0;
     if( l.Menu.vertical ) {
      if( l.Menu.submenuRelativeToItem ) top += parseInt(l.style.top);
      left = (parseInt(menuLayer.style.width)-4*l.Menu.menuBorder) + parseInt(menuLayer.style.left) + l.Menu.submenuXOffset;
     } else {
      top += parseInt(l.style.top);
      if( l.Menu.submenuRelativeToItem ) left = parseInt(menuLayer.style.left) + parseInt(l.style.left) + parseInt(l.style.width) + (2*l.Menu.menuBorder) + l.Menu.submenuXOffset;
      else left = (parseInt(menuLayer.style.width)-4*l.Menu.menuBorder) + parseInt(menuLayer.style.left) + l.Menu.submenuXOffset;
     }
     s.top = top + 'px';
     s.left = left + 'px';
    }
    childMenu.style.visibility = "inherit";
   } else return;
   window.activeMenus[window.activeMenus.length] = childMenu;
}
}
function hideActiveMenus() {
if (!window.activeMenus) return;
for (var i=0; i < window.activeMenus.length; i++) {
   if (!activeMenus[i]) continue;
   if (activeMenus[i].visibility && activeMenus[i].Menu && !window.mmIsOpera) {
    activeMenus[i].visibility = "hidden";
    activeMenus[i].Menu.container.visibility = "hidden";
    activeMenus[i].Menu.container.clip.left = 0;
   } else if (activeMenus[i].style) {
    var s = activeMenus[i].style;
    s.visibility = "hidden";
    s.left = '-200px';
    s.top = '-200px';
   }
}
if (window.ActiveMenuItem) hideMenu(false, false);
window.activeMenus.length = 0;
}
function moveXbySlicePos (x, img) {
if (!document.layers) {
   var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
   var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;
   var par = img;
   var lastOffset = 0;
   while(par){
    if( par.leftMargin && ! onWindows ) x += parseInt(par.leftMargin);
    if( (par.offsetLeft != lastOffset) && par.offsetLeft ) x += parseInt(par.offsetLeft);
    if( par.offsetLeft != 0 ) lastOffset = par.offsetLeft;
    par = macIE45 ? par.parentElement : par.offsetParent;
   }
} else if (img.x) x += img.x;
return x;
}
function moveYbySlicePos (y, img) {
if(!document.layers) {
   var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
   var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;
   var par = img;
   var lastOffset = 0;
   while(par){
    if( par.topMargin && !onWindows ) y += parseInt(par.topMargin);
    if( (par.offsetTop != lastOffset) && par.offsetTop ) y += parseInt(par.offsetTop);
    if( par.offsetTop != 0 ) lastOffset = par.offsetTop;
    par = macIE45 ? par.parentElement : par.offsetParent;
   }  
} else if (img.y >= 0) y += img.y;
return y;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例,演示如何使用Vue.js实现鼠标滑动显示二级菜单: ```html <template> <div class="menu-container"> <ul class="menu"> <li v-for="(item, index) in menuItems" :key="index" @mouseenter="showSubMenu(index)" @mouseleave="hideSubMenu(index)"> {{item.title}} <ul class="sub-menu" v-if="item.showSubMenu"> <li v-for="(subItem, subIndex) in item.subMenuItems" :key="subIndex"> {{subItem.title}} </li> </ul> </li> </ul> </div> </template> <script> export default { data() { return { menuItems: [ { title: '菜单1', showSubMenu: false, subMenuItems: [ { title: '子菜单1' }, { title: '子菜单2' }, { title: '子菜单3' }, ], }, { title: '菜单2', showSubMenu: false, subMenuItems: [ { title: '子菜单1' }, { title: '子菜单2' }, { title: '子菜单3' }, ], }, { title: '菜单3', showSubMenu: false, subMenuItems: [ { title: '子菜单1' }, { title: '子菜单2' }, { title: '子菜单3' }, ], }, ], }; }, methods: { showSubMenu(index) { // 显示子菜单 this.menuItems[index].showSubMenu = true; }, hideSubMenu(index) { // 隐藏子菜单 this.menuItems[index].showSubMenu = false; }, }, }; </script> <style scoped> .menu-container { width: 200px; } .menu { list-style-type: none; padding: 0; } .menu li { margin: 5px; cursor: pointer; } .sub-menu { list-style-type: none; margin: 0; padding: 0; display: none; } .sub-menu li { margin: 5px; } </style> ``` 在这个示例中,我们通过v-for指令循环遍历菜单项,并使用@mouseenter和@mouseleave事件监听器来显示和隐藏子菜单。我们还使用了v-if指令来根据showSubMenu属性判断是否显示子菜单。最后,我们在样式中设置了菜单和子菜单的样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值