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

📄 menu4.js

📁 很漂亮的javascript菜单
💻 JS
📖 第 1 页 / 共 4 页
字号:
function getMenuItemElement( el ) {	while ( el != null && el._menuItem == null)		el = el.parentNode;	return el;}function getTrElement( el ) {	while ( el != null && el.tagName != "TR" )		el = el.parentNode;	return el;}MenuBar.prototype.write = function (oDocument) {	this._document = oDocument || document;	this._document.write( this.toHtml() );	var el = this._document.getElementById( this.id );	this.hookupMenu( el );};MenuBar.prototype.create = function (oDocument) {	this._document = oDocument || document;	var dummyDiv = this._document.createElement( "DIV" );	dummyDiv.innerHTML = this.toHtml();	var el = dummyDiv.removeChild( dummyDiv.firstChild );	this.hookupMenu( el );	return el;};MenuBar.prototype.handleKeyEvent = function ( e ) {	if ( this.getActiveState() == "open" )		return;	var nKeyCode = e.keyCode;	if ( this.active && e[ Menu.keyboardAccelProperty ] ) {		e.returnValue = false;		e.keyCode = 0;	}	if ( nKeyCode == Menu.keyboardAccelKey || nKeyCode == Menu.keyboardAccelKey2 ) {		if ( !e.repeat ) {			this.toggleActive();		}		e.returnValue = false;		e.keyCode = 0;		return;	}	if ( !this.active ) {		// do not set return value to true		return;	}	switch ( nKeyCode ) {		case 39:	// right			this.goToNextMenuItem();			e.returnValue = false;			break;		case 37:	// left			this.goToPreviousMenuItem();			e.returnValue = false;			break;		case 40:	// down		case 38:	// up		case 13:	// enter			var mi = this.items[ this.getSelectedIndex() ];			if ( mi ) {				mi.dispatchAction();				if ( mi.subMenu )					mi.subMenu.setSelectedIndex( 0 );			}			e.returnValue = false;			break;		case 27:	// esc			// we need to make sure that the menu bar looses its current			// keyboard activation state			this.setActive( false );			e.returnValue = false;			break;		default:			// find any mnemonic that matches			var c = String.fromCharCode( nKeyCode ).toLowerCase();			var items = this.items;			var l = items.length;			for ( var i = 0; i < l; i++ ) {				if ( items[i].mnemonic == c ) {					items[i].dispatchAction();					e.returnValue = false;					break;				}			}	}};MenuBar.prototype.getMenuBar = function () {	return this;};MenuBar.prototype._menu_goToNextMenuItem = Menu.prototype.goToNextMenuItem;MenuBar.prototype.goToNextMenuItem = function () {	var expand = this.getActiveState() == "open";	this._menu_goToNextMenuItem();	var mi = this.items[ this.getSelectedIndex() ];	if ( expand && mi != null ) {		window.setTimeout(			"eventListeners.menuBar.ongotonextmenuitem(\"" + this.id + "\")",			1 );	}};MenuBar.prototype._menu_goToPreviousMenuItem = Menu.prototype.goToPreviousMenuItem;MenuBar.prototype.goToPreviousMenuItem = function () {	var expand = this.getActiveState() == "open";	this._menu_goToPreviousMenuItem();	var mi = this.items[ this.getSelectedIndex() ];	if ( expand && mi != null ) {		window.setTimeout(			"eventListeners.menuBar.ongotopreviousmenuitem(\"" + this.id + "\")",			1 );	}};MenuBar.prototype._menu_setSelectedIndex = Menu.prototype.setSelectedIndex;MenuBar.prototype.setSelectedIndex = function ( nIndex ) {	this._menu_setSelectedIndex( nIndex );	this.active = nIndex != -1;};MenuBar.prototype.setActive = function ( bActive ) {	if ( this.active != bActive ) {		this.active = Boolean( bActive );		if ( this.active ) {			this.setSelectedIndex( 0 );			this.backupFocused();			window.focus();		}		else {			this.setSelectedIndex( -1 );			this.restoreFocused();		}	}};MenuBar.prototype.toggleActive = function () {	if ( this.getActiveState() == "active" )		this.setActive( false );	else if ( this.getActiveState() == "inactive" )		this.setActive( true );};// returns active, inactive or openMenuBar.prototype.getActiveState = function () {	if ( this.shownSubMenu != null || this._aboutToShowSubMenu)		return "open";	else if ( this.active )		return "active";	else		return "inactive";};MenuBar.prototype.backupFocused = function () {	this._activeElement = this._document.activeElement;};MenuBar.prototype.restoreFocused = function () {	try {		this._activeElement.focus();	}	catch (ex) {}	delete this._activeElement;};MenuBar.prototype.destroy = function () {	var l = this.items.length;	for ( var i = l -1; i >= 0; i-- )		this.items[i].destroy();	this.detachEvents();	this._activeElement = null;	this._htmlElement = null;	this._document = null;	this.items = [];	this.shownSubMenu = null;	this.eventListeners = null;	menuCache.remove( this );};////////////////////////////////////////////////////////////////////////////////////// MenuButton extends MenuItem//function MenuButton( sLabelText, oSubMenu ) {	this.MenuItem = MenuItem;	this.MenuItem( sLabelText, null, null, oSubMenu );	// private	this._hover = false;	this._useInsets = false;	// should insets be taken into account when showing sub menu}MenuButton.prototype = new MenuItem;MenuButton.prototype.subMenuDirection = "vertical";MenuButton.prototype.scrollIntoView = function () {};MenuButton.prototype.toHtml = function () {	var cssClass = this.getCssClass();	var toolTip = this.getToolTip();	if ( this.subMenu && !this.subMenu._onclose )		this.subMenu._onclose = new Function( "eventListeners.menuButton.onclose(\"" + this.id + "\")" );	return	"<span unselectable=\"on\" " +			(cssClass != "" ? " class=\"" + cssClass + "\"" : "") +			(toolTip != "" ? " title=\"" + toolTip + "\"" : "") +			(!this.visible ? " style=\"display: none\"" : "") +			"><span unselectable=\"on\" class=\"left\"></span>" +			"<span unselectable=\"on\" class=\"middle\">" +				this.getTextHtml() +			"</span>" +			"<span unselectable=\"on\" class=\"right\"></span>" +			"</span>";};MenuButton.prototype.getCssClass = function () {	if ( this.disabled && this._selected )		return "menu-button disabled-hover";	else if ( this.disabled )		return "menu-button disabled";	else if ( this._selected ) {		if ( this.parentMenu.getActiveState() == "open" ) {			return "menu-button active";		}		else			return "menu-button hover";	}	else if ( this._hover )		return "menu-button hover";	return "menu-button ";};MenuButton.prototype.subMenuClosed = function () {	if ( this.subMenu._closeReason == "escape" )		this.setSelected( true );	else		this.setSelected( false );	if ( this.parentMenu.getActiveState() == "inactive" )		this.parentMenu.restoreFocused();};MenuButton.prototype.setSelected = function ( bSelected ) {	var oldSelected = this._selected;	this._selected = Boolean( bSelected );	var tr = this._htmlElement;	if ( tr )		tr.className = this.getCssClass();	if ( this._selected == oldSelected )		return;	if ( !this._selected )		this.closeSubMenu( true );	if ( bSelected ) {		this.parentMenu.setSelectedIndex( this.itemIndex );		this.scrollIntoView();	}	else		this.parentMenu.setSelectedIndex( -1 );};////////////////////////////////////////////////////////////////////////////////////// event listener//var eventListeners = {	menu: {		onkeydown:	function ( id ) {			var oThis = menuCache[id];			var w = oThis.getDocument().parentWindow;			oThis.handleKeyEvent( w.event );		},		onunload:	function ( id ) {			if (id in menuCache) {				menuCache[id].closeAllMenus();				menuCache[id].destroy();			}			// else already destroyed		},		oncontextmenu:	function ( id ) {			var oThis = menuCache[id];			var w = oThis.getDocument().parentWindow;			w.event.returnValue = false;		},		onscroll:	function ( id ) {			menuCache[id].fixScrollEnabledState();		},		onmouseover:	function ( id ) {			var oThis = menuCache[id];			var w = oThis.getDocument().parentWindow;			var fromEl	= getTrElement( w.event.fromElement );			var toEl	= getTrElement( w.event.toElement );			if ( toEl != null && toEl != fromEl ) {				var mi = toEl._menuItem;				if ( mi ) {					if ( !mi.disabled || oThis.mouseHoverDisabled ) {						mi.setSelected( true );						mi.showSubMenu( true );					}				}				else {	// scroll button					if (toEl.className == "disabled" || toEl.className == "disabled-hover" )						toEl.className = "disabled-hover";					else						toEl.className = "hover";					oThis.selectedIndex = -1;				}			}		},		onmouseout:	function ( id ) {			var oThis = menuCache[id];			var w = oThis.getDocument().parentWindow;			var fromEl	= getTrElement( w.event.fromElement );			var toEl	= getTrElement( w.event.toElement );			if ( fromEl != null && toEl != fromEl ) {				var id = fromEl.parentNode.parentNode.id;				var mi = fromEl._menuItem;				if ( id == "scroll-up-item" || id == "scroll-down-item" ) {					if (fromEl.className == "disabled-hover" || fromEl.className == "disabled" )						fromEl.className = "disabled";					else						fromEl.className = "";					oThis.selectedIndex = -1;				}				else if ( mi &&					( toEl != null || mi.subMenu == null || mi.disabled ) ) {					mi.setSelected( false );				}			}		},		onmouseup:	function ( id ) {			var oThis = menuCache[id];			var w = oThis.getDocument().parentWindow;			var srcEl	= getMenuItemElement( w.event.srcElement );			if ( srcEl != null ) {				var id = srcEl.parentNode.parentNode.id;				if ( id == "scroll-up-item" || id == "scroll-down-item" ) {					return;				}				oThis.selectedIndex = srcEl.rowIndex;				var menuItem = oThis.items[ oThis.selectedIndex ];				menuItem.dispatchAction();			}		},		onmousewheel:	function ( id ) {			var oThis = menuCache[id];			var d = oThis.getDocument();			var w = d.parentWindow;			var scrollContainer = d.getElementById("scroll-container");			scrollContainer.scrollTop -= 3 * w.event.wheelDelta / 120 * ScrollButton.scrollAmount;		},		onreadystatechange:	function ( id ) {			var oThis = menuCache[id];			var d = oThis.getDocument();			var linkEl = d.getElementsByTagName("LINK")[0];			if ( linkEl.readyState == "complete" ) {				oThis.resetSizeCache();	// reset sizes				oThis.fixSize();				oThis.fixScrollButtons();			}		},		oncloseinterval:	function ( id ) {			 menuCache[id]._checkCloseState();		}	},	menuItem:	{		onshowtimer:	function ( id ) {			var oThis = menuCache[id];			var sm = oThis.subMenu;			var pm = oThis.parentMenu;			var selectedIndex = sm.getSelectedIndex();			pm.closeAllSubs( sm );			window.setTimeout( "eventListeners.menuItem.onshowtimer2(\"" + id + "\")", 1);		},		onshowtimer2:	function ( id ) {			var oThis = menuCache[id];			var sm = oThis.subMenu;			var selectedIndex = sm.getSelectedIndex();			oThis.positionSubMenu();			sm.setSelectedIndex( selectedIndex );			oThis.setSelected( true );		},		onclosetimer:	function ( id ) {			var oThis = menuCache[id];			var sm = oThis.subMenu;			sm.close();		},		onpositionsubmenutimer:	function ( id ) {			var oThis = menuCache[id];			var sm = oThis.subMenu;			sm.resetSizeCache();	// reset sizes			oThis.positionSubMenu();			sm.setSelectedIndex( 0 );		}	},	menuBar:	{		onmouseover:	function ( id ) {			var oThis = menuCache[id];			var e = oThis.getDocument().parentWindow.event;			var fromEl = getMenuItemElement( e.fromElement );			var toEl = getMenuItemElement( e.toElement );			if ( toEl != null && toEl != fromEl ) {				var mb = toEl._menuItem;				var m = mb.parentMenu;				if ( m.getActiveState() == "open" ) {					window.setTimeout( function () {						mb.dispatchAction();					}, 1);				}				else if ( m.getActiveState() == "active" ) {					mb.setSelected( true );				}				else {					mb._hover = true;					toEl.className = mb.getCssClass();				}			}		},		onmouseout:	function ( id ) {			var oThis = menuCache[id];			var e = oThis.getDocument().parentWindow.event;			var fromEl = getMenuItemElement( e.fromElement );			var toEl = getMenuItemElement( e.toElement );			if ( fromEl != null && toEl != fromEl ) {				var mb = fromEl._menuItem;				mb._hover = false;				fromEl.className = mb.getCssClass();			}		},		onmousedown:	function ( id ) {			var oThis = menuCache[id];			var e = oThis.getDocument().parentWindow.event;			if ( e.button != MenuBar.leftMouseButton )				return;			var el = getMenuItemElement( e.srcElement );			if ( el != null ) {				var mb = el._menuItem;				if ( mb.subMenu ) {					mb.subMenu._checkCloseState();					if ( new Date() - mb.subMenu._closedAt > 100 ) {	// longer than the time to																		// do the hide						mb.dispatchAction();					}					else {						mb._hover = true;						mb._htmlElement.className = mb.getCssClass();					}				}			}		},		onkeydown:	function ( id ) {			var oThis = menuCache[id];			var e = oThis.getDocument().parentWindow.event;			oThis.handleKeyEvent( e );		},		onunload:	function ( id ) {			menuCache[id].destroy();		},		ongotonextmenuitem:	function ( id ) {			var oThis = menuCache[id];			var mi = oThis.items[ oThis.getSelectedIndex() ];			mi.dispatchAction();			if ( mi.subMenu )				mi.subMenu.setSelectedIndex( 0 );		},		ongotopreviousmenuitem:	function ( id ) {			var oThis = menuCache[id];			var mi = oThis.items[ oThis.getSelectedIndex() ];			mi.dispatchAction();			if ( mi.subMenu )				mi.subMenu.setSelectedIndex( 0 );		}	},	menuButton: {		onclose:	function ( id ) {			menuCache[id].subMenuClosed();		}	}};

⌨️ 快捷键说明

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