zoukankan      html  css  js  c++  java
  • javascript的弹出式菜单:ITPlusMenu v1.0.0.1

    把在一个项目里写的JS弹出式菜单提取了出来,因为觉得以后还可以重用。

    名字规则依旧:ITPlusMenu,当前是初始版本:1.0.0.1

    不是网络上很常见的那种树形的多级菜单,而是一个相对简单的导航菜单

    主要特点有:

    1)松耦合式的封装,因此有很大的灵活性

    2)开发时手边的浏览器较全,在IE7/8、FF、Opera 10.63上经测试均可正常使用

    3)。。。自己感觉很顺手

    先来个仿Opera的效果图:

    调用示例:

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
     2  <html xmlns="http://www.w3.org/1999/xhtml">   
     3  <head>   
     4  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />   
     5  <!-- 引入ITPlusMenu菜单库文件 -->   
     6  <script language="javascript" type="text/javascript" src="ITPlusMenu.js" mce_src="ITPlusMenu.js"></script>   
     7  <title>ITPlusMenu Demo</title>   
     8  </head>   
     9  <body>   
    10     <!--  
    11     这里是四个根菜单项,可自由展示  
    12     -->   
    13     <div id="menuList">   
    14         <div id="menu01">第1个菜单项</div>   
    15         <div id="menu02">第2个菜单项</div>   
    16         <div id="menu03">第3个菜单项</div>   
    17         <div id="menu04">第4个菜单项</div>   
    18     </div>   
    19     <!--  
    20     这里是四个根菜单项对应的展开内容,也可自由展示  
    21     -->   
    22     <div id="menuContents">   
    23         <div id="menu01_content">第1个菜单项的内容</div>   
    24         <div id="menu02_content">第2个菜单项的内容</div>   
    25         <div id="menu03_content">第3个菜单项的内容</div>   
    26         <div id="menu04_content">第4个菜单项的内容</div>   
    27     </div>   
    28     <!--  
    29     菜单初始化  
    30     -->   
    31     <script language="javascript" type="text/javascript"><!--   
    32     var menu = new ITPlusMenu({   
    33         region : 'right'//菜单内容显示在菜单的哪个方向(top/right/bottom/left),默认为:bottom   
    34         padding : 5//菜单内容和菜单项之间的留白,默认为0   
    35         interval : 1000//鼠标离开有效区域之后,多久隐藏菜单内容,默认为500毫秒   
    36         menu : { //菜单项Tag和内容Tag的配对信息   
    37             menu01 : 'menu01_content',   
    38             menu02 : 'menu02_content',   
    39             menu03 : 'menu03_content',   
    40             menu04 : 'menu04_content',   
    41             menu05 : 'menu05_content'   
    42         }   
    43     });   
    44     menu.init(); //初始化菜单显示及事件监听   
    45     </script>   
    46 </body>   
    47 </html> 
    48 

     菜单文件源码(ITPlusMenu.js):

     1 /**  
     2  * ITPlusMenu导航菜单库  
     3  * Author : Z,MingYu (netwild) 网无忌  
     4  * Date : 2010-11-20 0:57  
     5  * ver : 1.0.0.1  
     6  * Email : netwild@itplus.com.cn  
     7  * QQ : 52100641  
     8  */   
     9 function ITPlusMenu(cfg){   
    10     var _self = this;   
    11     var region = cfg.region ? cfg.region : "bottom" ;   
    12     var padding = cfg.padding ? cfg.padding : 0;   
    13     var interval = cfg.interval ? cfg.interval : 500;   
    14     var menu = cfg.menu;   
    15     var menuTimer = null;   
    16     var x,y,menuW,menuH,contentW,contentH,showX,showY,objMenu,objContent;   
    17     this.init = function(){   
    18         for(var menuItem in menu){   
    19             _self.addEvent(menuItem,menu[menuItem]);   
    20                
    21             objMenu = $(menuItem);   
    22             objContent = $(menu[menuItem]);   
    23             menuW = objMenu.offsetWidth;   
    24             menuH = objMenu.offsetHeight;   
    25             contentW = objContent.offsetWidth;   
    26             contentH = objContent.offsetHeight;   
    27             x = objMenu.offsetLeft;   
    28             y = objMenu.offsetTop;   
    29             while(objMenu = objMenu.offsetParent){   
    30                 x += objMenu.offsetLeft;   
    31                 y += objMenu.offsetTop;   
    32             }   
    33             if(region == "left" || region == "l"){ showX = x - contentW - padding ; showY = y;}   
    34             if(region == "top" || region == "t"){ showX = x ; showY = y - contentH - padding;}   
    35             if(region == "right" || region == "r"){ showX = x + menuW + padding ; showY = y;}   
    36             if(region == "bottom" || region == "b"){ showX = x ; showY = y + menuH + padding;}   
    37             objContent.style.left = showX + "px";   
    38             objContent.style.top = showY + "px";   
    39         }   
    40     }   
    41     this.addEvent = function(menuId,menuContentId){   
    42         $(menuId).onmouseover = function(){ _self.showMenu(menuId,menuContentId);}   
    43         $(menuContentId).onmouseover = function(){ _self.showMenu(menuId,menuContentId);}   
    44         $(menuId).onmouseout = function(){ _self.hideMenu(menuId,menuContentId);}   
    45         $(menuContentId).onmouseout = function(){ _self.hideMenu(menuId,menuContentId);}   
    46     }   
    47     this.showMenu = function(menuId,menuContentId){   
    48         clearTimeout(menuTimer);   
    49         for(var menuItem in menu){   
    50             $(menu[menuItem]).style.visibility = (menuItem == menuId ? "visible" : "hidden");   
    51         }   
    52     }   
    53     this.hideMenu = function(menuId,menuContentId){   
    54         menuTimer = setTimeout("$('"+menuContentId+"').style.visibility = 'hidden'",interval);   
    55     }   
    56 }  

  • 相关阅读:
    【02】Nginx:基本配置和日志处理
    【01】Nginx:编译安装/动态添加模块
    【09】Jenkins:Pipeline 补充
    【08】Jenkins:关于发布
    【07】Jenkins:流水线(Pipeline)
    【06】Jenkins:Gitlab 自动触发构建以及钉钉通知
    【05】Jenkins:用户权限管理
    【04】Jenkins:基本功能补充说明
    【03】Jenkins:SonarQube
    【02】Jenkins:第一个项目
  • 原文地址:https://www.cnblogs.com/netWild/p/1892398.html
Copyright © 2011-2022 走看看