⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ig_webmenu.js

📁 研究怎样通过手写代码来完成自动生成代码
💻 JS
📖 第 1 页 / 共 5 页
字号:
	return item;
}

// private
function igmenu_getItemParent()
{
	var item=null;
	var itemName=this.element.id.split("_")
	if(itemName.length>1)
	{
		var parentName=this.element.id.substr(0,this.element.id.length-itemName[itemName.length-1].length-1);
		item=igmenu_getItemById(parentName);
	}
	return item;
}

// private
function igmenu_getItemItems()
{
	var itemAr=new Array();
	var itemCount=0;
	var item=this.getFirstChild();
	while(item)	{
		itemAr[itemCount++]=item;
		item=item.getNextSibling();
	}
	return itemAr;
}

/*  The following are all PRIVATE methods are used for keyboard Navigation */

function igmenu_kbMD(oItem,evt)
{
	// make into an menu item 
	oItem = igmenu_getItemById(oItem.id.length>0?oItem.id:oItem.parentElement.id);
	if (evt.keyCode==9){		
		if (oItem && oItem.Id!=oItem.WebMenu.getZerothMember().Id)
			if(oItem.element.tabIndex!=-1)	AdjustTabIndex(oItem,null);
	}
	else if (evt.keyCode==37 || evt.keyCode==39 || evt.keyCode==9 || evt.keyCode==38 || evt.keyCode==40)
		igmenu_mouseout(null, evt);	
	
	else if ( (evt.keyCode >= 48 && evt.keyCode <= 57)	|| // 0 - 9
			(evt.keyCode >= 65 && evt.keyCode <= 122)	 // A - Z a - z
		)
		{			
			// check children first
			var oItems = oItem.getItems();
			var oTempItem = null;
			
			for (var i = 0 ; i < oItems.length ; i++)			
			{
				oTempItem = oItems[i];
				oAccessKeyString = oTempItem.getAccessKey();
				if (null!=oAccessKeyString && oAccessKeyString.length>0)
				{
					if (oAccessKeyString.toLowerCase().charCodeAt(0)==evt.keyCode || 
						oAccessKeyString.toUpperCase().charCodeAt(0)==evt.keyCode)
						
						if(oTempItem.getEnabled() || !oTempItem.IsSeparator()) 
						{
							AdjustTabIndex(oItem,oTempItem,true);
							if (oTempItem.getItems().length==0)
								igmenu_ExecuteItem(evt,oTempItem.Id,oTempItem.Element);
							return;
						}
				}
			}
			
			oTempItem = oItem;											
			do
			{
				oTempItem = oTempItem.getNextSibling();				
				if (null==oTempItem)
				{	// if none found, then navigate to the first item in the sibling set and go to that
					if (oItem.getLevel()==0)
						oTempItem = oItem.WebMenu.getItems();
					else
						oTempItem = oItem.getParent().getItems();
						
					// if not null, grap first item and go to that
					if (oTempItem) oTempItem = oTempItem[0];																								
				}
				if(oTempItem && oTempItem.Id==oItem.Id) break;
				oAccessKeyString = oTempItem.getAccessKey();
				if (null!=oAccessKeyString && oAccessKeyString.length>0)
				{
					if (oAccessKeyString.toLocaleLowerCase().charCodeAt(0)==evt.keyCode || 
						oAccessKeyString.toLocaleUpperCase().charCodeAt(0)==evt.keyCode)
						
						if(oTempItem.getEnabled() || !oTempItem.IsSeparator()) 
						{
							AdjustTabIndex(oItem,oTempItem,true);
							if (oTempItem.getItems().length==0)
								igmenu_ExecuteItem(evt,oTempItem.Id);
							return;
						}
				}
			}
			while(oTempItem);
		}		
}

var bFromKeyBoardNav = false;
function igmenu_kbNav(oItem,evt)
{	
	if (evt.keyCode==37 || 
		evt.keyCode==38 || 
		evt.keyCode==39 || 
		evt.keyCode==40 || 
		evt.keyCode==27) 
		{
			bFromKeyBoardNav = true;
			KeyBoardMove(igmenu_getItemById(evt.srcElement.id.length>0?evt.srcElement.id:oItem.parentElement.id ), evt.keyCode, evt); // process arrow keys
			return;
		}
	var oChildItem = null;
			
	if (evt.keyCode==32) // space key
	{					
		if (oItem.id=="")  oItem = oItem.parentElement;					
	
		if (null == (oChildItem = igmenu_getItemById(oItem.id).getFirstChild()))				
			igmenu_ExecuteItem(evt,oItem);		
		else // show the child menu
		{	
			var oChildMenu=null;
			var oObjItem = igmenu_getItemById(oItem.id);		
			if (oObjItem.getLevel()==0 & oObjItem.WebMenu.MenuTarget==1)
			{
				oChildMenu = oObjItem.Element.attributes["igChildId"];
				if (oChildMenu) oObjItem.WebMenu.displayHorizontalSubMenu(oObjItem.Element,oChildMenu.value);								
				AdjustTabIndex(null,oChildItem);		
			}
			else 
			{
				oChildMenu = oObjItem.Element.attributes["igChildId"];
				if (oChildMenu)	oObjItem.WebMenu.displaySubSubMenu(oObjItem.Element,oChildMenu.value);
			}		
			AdjustTabIndex(null,oChildItem)
		}
	}	
}
function igmenu_kbFocus(oItem,evt)
{
	var oError = false;
	if (oItem.id==null || oItem.id=="")
	{
		oItem = oItem.parentElement;
		try
		{
			oItem.focus();			
		}
		catch(e)
		{oError=true}
	}

	if (!oError && oItem)
	{
		igmenu_mouseover(oItem, evt, false);
		
		var oObjItem = igmenu_getItemById(oItem.id);
		if(oObjItem.WebMenu == null || oObjItem.WebMenu.MenuLoaded == false)
			return;
		var bSameItem = igmenu_Enqueue(oObjItem);
		
		if  (null!=oObjItem && !bSameItem)
		if (oObjItem.getLevel()==0 & oObjItem.WebMenu.MenuTarget==1)
		{
			oChildMenu = oObjItem.Element.attributes["igChildId"];
			if (bOpenSubMenuOnFocus)
				if (oChildMenu)
					oObjItem.WebMenu.displayHorizontalSubMenu(oObjItem.Element,oChildMenu.value);
				else
					if(!bFromKeyBoardNav) igmenu_ExecuteItem(evt,oObjItem.Id,oObjItem.Element);			
		}
		else
		{
			oChildMenu = oObjItem.Element.attributes["igChildId"];
			if (bOpenSubMenuOnFocus)
				if(oChildMenu)
					oObjItem.WebMenu.displaySubSubMenu(oObjItem.Element,oChildMenu.value);
		}
		
	}
	bFromKeyBoardNav = false;
	bOpenSubMenuOnFocus = true;
	ig_inMenu = false;
}
var bOpenSubMenuOnFocus = true;
function KeyBoardMove(oItem, keyCode, evt)
{
	if (oItem==null) return;
	var oLevel = oItem.getLevel();
	var oMenuTarget = oItem.WebMenu.MenuTarget;
	var oNextItem = null;
	var bSetFocus = true;	
	var oChildMenu = null;	
	
	switch(keyCode)
	{
		case(27):
				// on an escape, navigate up a menu lvl.  At level zero????
				oItem.WebMenu.unhoverItem(oItem.Element, false);
				if (oLevel>0)
				{
					oNextItem = oItem.getParent();					
					oChildMenu = oNextItem.Element.attributes["igChildId"];
					oItem.WebMenu.unhoverItem(oItem.Element, false);
					bOpenSubMenuOnFocus = false
					AdjustTabIndex(oItem,oNextItem,true);
					if (oChildMenu) oNextItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
				}
				else
				{														
					oItem.Element.blur();
					AdjustTabIndex(oItem,oNextItem);
				}
				
			break;
		case(37):  // left arrow (base)
				if ( oMenuTarget==1&&oLevel<=1 )  // and a horizontal menu
				{														
					oNextItem = igmenu_getNextKBParent(oItem,-1);
					var oOldItem = oItem;
					while(oOldItem.getLevel()>0) oOldItem=oOldItem.getParent();
					
					oChildMenu = oOldItem.Element.attributes["igChildId"];
					if (oChildMenu)	oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));

					AdjustTabIndex(oItem,oNextItem);  // if found, focus on that
					igmenu_unhoverPath(oItem);
				}
				else //if (oMenuTarget==1)
				{
					oNextItem = oItem.getParent();
					if(! (typeof(oNextItem.getLevel())=="number")){oNextItem=null;}
					
					AdjustTabIndex(oItem,oNextItem);  // if found, focus on that
					oItem.WebMenu.unhoverItem(oItem.Element, false);	
					if(oNextItem) oChildMenu = oNextItem.Element.attributes["igChildId"];
					if (oChildMenu) oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
				}
				if (oMenuTarget==1 && oItem.getLevel()==1 && oNextItem.getLevel()==0)
				{
					oChildMenu = oItem.Element.attributes["igChildId"];
					if (oChildMenu)	oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
					
					oChildMenu = oNextItem.Element.attributes["igChildId"];
					if (oChildMenu)
					{
						oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
						oNextItem.WebMenu.hoverItem(oNextItem.Element);
					}
				}				
			break;  
		case(38):  //up 
			if (oLevel==0&&oMenuTarget==1)
			{
				if (null == (oNextItem = igmenu_getItemById(oItem.Id).getFirstChild()))
				{
					/* in this case don't do anything, just ignore it.*/
					AdjustTabIndex(null,oNextItem);
				}
				else // show the child menu
				{						
					oChildMenu = oItem.Element.attributes["igChildId"];
					if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oItem.Element,oChildMenu.value);												
					AdjustTabIndex(null,oNextItem);
				}
			}
			else
			{
				oNextItem = oItem;
				do 
				{
					oNextItem = oNextItem.getPrevSibling();  // get next sibling item
								
					if (null==oNextItem) 														 
					{	// if none found, then navigate to the first item in the sibling set and go to that
						if (oItem.getLevel()==0)
							oNextItem = oItem.WebMenu.getItems();
						else
							oNextItem = oItem.getParent().getItems();						
						// if not null, grap first item and go to that
						if (oNextItem) oNextItem = oNextItem[oNextItem.length-1];
					}
				}
				while(oNextItem && (!oNextItem.getEnabled() || oNextItem.IsSeparator()));
					
				AdjustTabIndex(oItem,oNextItem);  // if found, focus on that
			}
			break;
		case(39): // right arrow (base)				
			if (oMenuTarget==1&&oLevel==0)  // if at the top level and a horizontal menu				
			{	
				oNextItem = igmenu_getNextKBParent(oItem,1) ;

				AdjustTabIndex(oItem,oNextItem);  // if found, focus on that
				
				oChildMenu = oItem.Element.attributes["igChildId"];
				if(oChildMenu)	oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
				igmenu_unhoverPath(oItem);		
			}
			else if(oMenuTarget==1&&oLevel>0)
			{
				/*	Hitting the right arrow in a horizontal menu sub menu result depends on if the sub menu item has children or not.  
					if not then we navigatate to the next overall parent record	*/
				if (oItem.getItems().length>0) oNextItem = oItem.getItems()[0];
				else oNextItem = igmenu_getNextKBParent(oItem,1) ;				
				
				//if (oMenuTarget==1 && oItem.getLevel()>=1 && oNextItem.getLevel()==0)
				if (oMenuTarget==1 && oItem.getLevel()==1 && oNextItem.getLevel()==0)
				{
					// need to close the menu
					oChildMenu = oItem.getParent().Element.attributes["igChildId"];
					if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
					
					oChildMenu = oNextItem.Element.attributes["igChildId"];
					if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
					igmenu_unhoverPath(oItem);
				}
				else if (oNextItem.getLevel()>0)				
				{
					oChildMenu = oItem.Element.attributes["igChildId"];
					if (oChildMenu)	oItem.WebMenu.displaySubSubMenu(oItem.Element,oChildMenu.value);
					oItem.WebMenu.hoverItem(oItem.Element);
				}	
				else
				{
					// need to close the menu					
					var oTempItem=oItem;
					for (var i = oTempItem.getLevel() ; i>0 ; i-- )
					{										
						oTempItem.WebMenu.unhoverItem(oTempItem.Element, true);	
						oTempItem = oTempItem.getParent();
						oChildMenu = oTempItem.Element.attributes["igChildId"];
						if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));											
					}
					
					oChildMenu = oItem.getParent().Element.attributes["igChildId"];
					if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
					
					oChildMenu = oNextItem.Element.attributes["igChildId"];					
					if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
					igmenu_unhoverPath(oItem, true);
				}				
				AdjustTabIndex(oItem,oNextItem,bSetFocus);  // if found, focus on that				
			}
			else  // Vertical menu
			{
				var oTempItem = oItem.getItems();				
				if (oTempItem.length>0)
				{
					oNextItem=null;
					for(var i=0; i < oTempItem.length && oNextItem==null; i++)					
						if (oTempItem[i].getEnabled())						
							oNextItem = oTempItem[i];													
									
					oChildMenu = oItem.Element.attributes["igChildId"];					
					if(oChildMenu)
						if (oItem.getLevel()==0)											
							oItem.WebMenu.displayVerticalSubMenu(oItem.Element,oChildMenu.value);					
						else
							oItem.WebMenu.displaySubSubMenu(oItem.Element,oChildMenu.value);

					AdjustTabIndex(oItem,oNextItem);
					oItem.WebMenu.hoverItem(oItem.Element);						
				}
				else
				{
					// for right now, if we arrow off a vertical menu, go back to the topmost parent Item					
					oNextItem=oItem;
					for (var i = oItem.getLevel() ; i>0 ; i-- )
					{				
						oNextItem.WebMenu.unhoverItem(oNextItem.Element, true);	
						oNextItem = oNextItem.getParent();
						oChildMenu = oNextItem.Element.attributes["igChildId"];
						if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));											
					}					
					AdjustTabIndex(null,oNextItem,true);
				}				
			}
			break;
		case(40): // down					
			if (oLevel==0&&oMenuTarget==1)
			{										
				if (null == (oNextItem = igmenu_getItemById(oItem.Id).getFirstChild()))
				{/* in this case don't do anything, just ignore it.*/
					AdjustTabIndex(null,oItem);
				}
				else // show the child menu
				{						
					oChildMenu = oItem.Element.attributes["igChildId"];
					if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oItem.Element,oChildMenu.value);												
					AdjustTabIndex(oItem,oNextItem);
					oItem.WebMenu.hoverItem(oItem.Element);
				}
			}
			else 
			{
					oNextItem = oItem;
					do
					{
						oNextItem = oNextItem.getNextSibling();
						if (null==oNextItem)
						{	// if none found, then navigate to the first item in the sibling set and go to that
							if (oItem.getLevel()==0)
								oNextItem = oItem.WebMenu.getItems();
							else
								oNextItem = oItem.getParent().getItems();
								
							// if not null, grap first item and go to that
							if (oNextItem) oNextItem = oNextItem[0];																								
						}
					}
					while(oNextItem && (!oNextItem.getEnabled() || oNextItem.IsSeparator()));
					
					AdjustTabIndex(oItem,oNextItem);  // if found, focus on that										
			}
			break;					
	}
}

// private		
// In IE, in order for the focus to be settable, we need to set the tab index on the element.
// however we don't want the tab index to remain on that element forever, so we need to strip it off the
// old 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -