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

📄 menu.js

📁 原名JSPackager
💻 JS
📖 第 1 页 / 共 4 页
字号:
YAHOO.widget.MenuModule = function (p_oElement, p_oConfig) {YAHOO.widget.MenuModule.superclass.constructor.call(this, p_oElement, p_oConfig);};YAHOO.extend(YAHOO.widget.MenuModule, YAHOO.widget.Overlay);YAHOO.widget.MenuModule.prototype.CSS_CLASS_NAME = "yuimenu";YAHOO.widget.MenuModule.prototype.ITEM_TYPE = null;YAHOO.widget.MenuModule.prototype.GROUP_TITLE_TAG_NAME = "H6";YAHOO.widget.MenuModule.prototype._aGroupTitleElements = null;YAHOO.widget.MenuModule.prototype._aItemGroups = null;YAHOO.widget.MenuModule.prototype._aListElements = null;YAHOO.widget.MenuModule.prototype._oEventUtil = YAHOO.util.Event;YAHOO.widget.MenuModule.prototype._oDom = YAHOO.util.Dom;YAHOO.widget.MenuModule.prototype._oCurrentItem = null;YAHOO.widget.MenuModule.prototype._bFiredMouseOverEvent = false;YAHOO.widget.MenuModule.prototype._bFiredMouseOutEvent = false;YAHOO.widget.MenuModule.prototype.activeItem = null;YAHOO.widget.MenuModule.prototype.parent = null;YAHOO.widget.MenuModule.prototype.srcElement = null;YAHOO.widget.MenuModule.prototype.mouseOverEvent = null;YAHOO.widget.MenuModule.prototype.mouseOutEvent = null;YAHOO.widget.MenuModule.prototype.mouseDownEvent = null;YAHOO.widget.MenuModule.prototype.mouseUpEvent = null;YAHOO.widget.MenuModule.prototype.clickEvent = null;YAHOO.widget.MenuModule.prototype.keyPressEvent = null;YAHOO.widget.MenuModule.prototype.keyDownEvent = null;YAHOO.widget.MenuModule.prototype.keyUpEvent = null;YAHOO.widget.MenuModule.prototype.init = function (p_oElement, p_oConfig) {var Dom = this._oDom;var Event = this._oEventUtil;if (!this.ITEM_TYPE) {this.ITEM_TYPE = YAHOO.widget.MenuModuleItem;}this._aItemGroups = [];this._aListElements = [];this._aGroupTitleElements = [];var oElement;if (typeof p_oElement == "string") {oElement = document.getElementById(p_oElement);} else {if (p_oElement.tagName) {oElement = p_oElement;}}if (oElement) {switch (oElement.tagName) {case "DIV":this.srcElement = oElement;YAHOO.widget.MenuModule.superclass.init.call(this, oElement);this.beforeInitEvent.fire(YAHOO.widget.MenuModule);var oNode = this.body.firstChild;var i = 0;do {switch (oNode.tagName) {case this.GROUP_TITLE_TAG_NAME:this._aGroupTitleElements[i] = oNode;break;case "UL":this._aListElements[i] = oNode;this._aItemGroups[i] = [];i++;break;}} while ((oNode = oNode.nextSibling));if (this._aListElements[0]) {Dom.addClass(this._aListElements[0], "first-of-type");}break;case "SELECT":this.srcElement = oElement;var sId = Dom.generateId();YAHOO.widget.MenuModule.superclass.init.call(this, sId);this.beforeInitEvent.fire(YAHOO.widget.MenuModule);break;}} else {YAHOO.widget.MenuModule.superclass.init.call(this, p_oElement);this.beforeInitEvent.fire(YAHOO.widget.MenuModule);}if (this.element) {var oEl = this.element;var CustomEvent = YAHOO.util.CustomEvent;Dom.addClass(oEl, this.CSS_CLASS_NAME);Event.addListener(oEl, "mouseover", this._onElementMouseOver, this, true);Event.addListener(oEl, "mouseout", this._onElementMouseOut, this, true);Event.addListener(oEl, "mousedown", this._onDOMEvent, this, true);Event.addListener(oEl, "mouseup", this._onDOMEvent, this, true);Event.addListener(oEl, "click", this._onElementClick, this, true);Event.addListener(oEl, "keydown", this._onDOMEvent, this, true);Event.addListener(oEl, "keyup", this._onDOMEvent, this, true);Event.addListener(oEl, "keypress", this._onDOMEvent, this, true);this.mouseOverEvent = new CustomEvent("mouseOverEvent", this);this.mouseOutEvent = new CustomEvent("mouseOutEvent", this);this.mouseDownEvent = new CustomEvent("mouseDownEvent", this);this.mouseUpEvent = new CustomEvent("mouseUpEvent", this);this.clickEvent = new CustomEvent("clickEvent", this);this.keyPressEvent = new CustomEvent("keyPressEvent", this);this.keyDownEvent = new CustomEvent("keyDownEvent", this);this.keyUpEvent = new CustomEvent("keyUpEvent", this);this.beforeRenderEvent.subscribe(this._onBeforeRender, this, true);this.renderEvent.subscribe(this._onRender, this, true);this.showEvent.subscribe(this._onShow, this, true);this.beforeHideEvent.subscribe(this._onBeforeHide, this, true);if (p_oConfig) {this.cfg.applyConfig(p_oConfig, true);}this.cfg.queueProperty("visible", false);if (this.srcElement) {this._initSubTree();}}this.initEvent.fire(YAHOO.widget.MenuModule);};YAHOO.widget.MenuModule.prototype._initSubTree = function () {var oNode;switch (this.srcElement.tagName) {case "DIV":if (this._aListElements.length > 0) {var i = this._aListElements.length - 1;do {oNode = this._aListElements[i].firstChild;do {switch (oNode.tagName) {case "LI":this.addItem(new this.ITEM_TYPE(oNode), i);break;}} while ((oNode = oNode.nextSibling));} while (i--);}break;case "SELECT":oNode = this.srcElement.firstChild;do {switch (oNode.tagName) {case "OPTGROUP":case "OPTION":this.addItem(new this.ITEM_TYPE(oNode));break;}} while ((oNode = oNode.nextSibling));break;}};YAHOO.widget.MenuModule.prototype._getFirstEnabledItem = function () {var nGroups = this._aItemGroups.length;var oItem;var aItemGroup;for (var i = 0; i < nGroups; i++) {aItemGroup = this._aItemGroups[i];if (aItemGroup) {var nItems = aItemGroup.length;for (var n = 0; n < nItems; n++) {oItem = aItemGroup[n];if (!oItem.cfg.getProperty("disabled")) {return oItem;}oItem = null;}}}};YAHOO.widget.MenuModule.prototype._checkPosition = function (p_sPosition) {if (typeof p_sPosition == "string") {var sPosition = p_sPosition.toLowerCase();return ("dynamic,static".indexOf(sPosition) != -1);}};YAHOO.widget.MenuModule.prototype._addItemToGroup = function (p_nGroupIndex, p_oItem, p_nItemIndex) {var Dom = this._oDom;var oItem;if (p_oItem instanceof this.ITEM_TYPE) {oItem = p_oItem;} else {if (typeof p_oItem == "string") {oItem = new this.ITEM_TYPE(p_oItem);}}if (oItem) {var nGroupIndex = typeof p_nGroupIndex == "number" ? p_nGroupIndex : 0;var aGroup = this._getItemGroup(nGroupIndex);var oGroupItem;if (!aGroup) {aGroup = this._createItemGroup(nGroupIndex);}if (typeof p_nItemIndex == "number") {var bAppend = (p_nItemIndex >= aGroup.length);if (aGroup[p_nItemIndex]) {aGroup.splice(p_nItemIndex, 0, oItem);} else {aGroup[p_nItemIndex] = oItem;}oGroupItem = aGroup[p_nItemIndex];if (oGroupItem) {if (bAppend && !oGroupItem.element.parentNode) {this._aListElements[nGroupIndex].appendChild(oGroupItem.element);} else {function getNextItemSibling(p_aArray, p_nStartIndex) {return (p_aArray[p_nStartIndex] || getNextItemSibling(p_aArray, (p_nStartIndex + 1)));}var oNextItemSibling = getNextItemSibling(aGroup, (p_nItemIndex + 1));if (oNextItemSibling && !oGroupItem.element.parentNode) {this._aListElements[nGroupIndex].insertBefore(oGroupItem.element, oNextItemSibling.element);}}oGroupItem.parent = this;this._subscribeToItemEvents(oGroupItem);this._configureItemSubmenuModule(oGroupItem);this._updateItemProperties(nGroupIndex);return oGroupItem;}} else {var nItemIndex = aGroup.length;aGroup[nItemIndex] = oItem;oGroupItem = aGroup[nItemIndex];if (oGroupItem) {if (!Dom.isAncestor(this._aListElements[nGroupIndex], oGroupItem.element)) {this._aListElements[nGroupIndex].appendChild(oGroupItem.element);}oGroupItem.element.setAttribute("groupindex", nGroupIndex);oGroupItem.element.setAttribute("index", nItemIndex);oGroupItem.parent = this;oGroupItem.index = nItemIndex;oGroupItem.groupIndex = nGroupIndex;this._subscribeToItemEvents(oGroupItem);this._configureItemSubmenuModule(oGroupItem);if (nItemIndex === 0) {Dom.addClass(oGroupItem.element, "first-of-type");}return oGroupItem;}}}};YAHOO.widget.MenuModule.prototype._removeItemFromGroupByIndex = function (p_nGroupIndex, p_nItemIndex) {var nGroupIndex = typeof p_nGroupIndex == "number" ? p_nGroupIndex : 0;var aGroup = this._getItemGroup(nGroupIndex);if (aGroup) {var aArray = aGroup.splice(p_nItemIndex, 1);var oItem = aArray[0];if (oItem) {this._updateItemProperties(nGroupIndex);if (aGroup.length === 0) {var oUL = this._aListElements[nGroupIndex];if (this.body && oUL) {this.body.removeChild(oUL);}this._aItemGroups.splice(nGroupIndex, 1);this._aListElements.splice(nGroupIndex, 1);oUL = this._aListElements[0];if (oUL) {this._oDom.addClass(oUL, "first-of-type");}}return oItem;}}};YAHOO.widget.MenuModule.prototype._removeItemFromGroupByValue = function (p_nGroupIndex, p_oItem) {var aGroup = this._getItemGroup(p_nGroupIndex);if (aGroup) {var nItems = aGroup.length;var nItemIndex = -1;if (nItems > 0) {var i = nItems - 1;do {if (aGroup[i] == p_oItem) {nItemIndex = i;break;}} while (i--);if (nItemIndex > -1) {return this._removeItemFromGroupByIndex(p_nGroupIndex, nItemIndex);}}}};YAHOO.widget.MenuModule.prototype._updateItemProperties = function (p_nGroupIndex) {var aGroup = this._getItemGroup(p_nGroupIndex);var nItems = aGroup.length;if (nItems > 0) {var Dom = this._oDom;var i = nItems - 1;var oItem;var oLI;do {oItem = aGroup[i];if (oItem) {oLI = oItem.element;oItem.index = i;oItem.groupIndex = p_nGroupIndex;oLI.setAttribute("groupindex", p_nGroupIndex);oLI.setAttribute("index", i);Dom.removeClass(oLI, "first-of-type");}} while (i--);if (oLI) {Dom.addClass(oLI, "first-of-type");}}};YAHOO.widget.MenuModule.prototype._createItemGroup = function (p_nIndex) {if (!this._aItemGroups[p_nIndex]) {this._aItemGroups[p_nIndex] = [];var oUL = document.createElement("ul");this._aListElements[p_nIndex] = oUL;return this._aItemGroups[p_nIndex];}};YAHOO.widget.MenuModule.prototype._getItemGroup = function (p_nIndex) {var nIndex = ((typeof p_nIndex == "number") ? p_nIndex : 0);return this._aItemGroups[nIndex];};YAHOO.widget.MenuModule.prototype._configureItemSubmenuModule = function (p_oItem) {var oSubmenu = p_oItem.cfg.getProperty("submenu");if (oSubmenu) {this.cfg.configChangedEvent.subscribe(this._onParentMenuModuleConfigChange, oSubmenu, true);this.renderEvent.subscribe(this._onParentMenuModuleRender, oSubmenu, true);oSubmenu.beforeShowEvent.subscribe(this._onSubmenuBeforeShow, oSubmenu, true);oSubmenu.showEvent.subscribe(this._onSubmenuShow, oSubmenu, true);oSubmenu.hideEvent.subscribe(this._onSubmenuHide, oSubmenu, true);}};YAHOO.widget.MenuModule.prototype._subscribeToItemEvents = function (p_oItem) {var aArguments = [this, p_oItem];p_oItem.focusEvent.subscribe(this._onItemFocus, aArguments);p_oItem.blurEvent.subscribe(this._onItemBlur, aArguments);p_oItem.cfg.configChangedEvent.subscribe(this._onItemConfigChange, aArguments);};YAHOO.widget.MenuModule.prototype._getOffsetWidth = function () {var oClone = this.element.cloneNode(true);this._oDom.setStyle(oClone, "width", "");document.body.appendChild(oClone);var sWidth = oClone.offsetWidth;document.body.removeChild(oClone);return sWidth;};YAHOO.widget.MenuModule.prototype._fireItemEvent = function (p_oElement, p_sEventType, p_oDOMEvent) {var me = this;function getItemElement(p_oElement) {if (p_oElement == me.element) {return;} else {if (p_oElement.tagName == "LI") {return p_oElement;} else {if (p_oElement.parentNode) {return getItemElement(p_oElement.parentNode);}}}}var oElement = getItemElement(p_oElement);if (oElement) {var nGroupIndex = parseInt(oElement.getAttribute("groupindex"), 10);var nIndex = parseInt(oElement.getAttribute("index"), 10);var oItem = this._aItemGroups[nGroupIndex][nIndex];if (!oItem.cfg.getProperty("disabled")) {oItem[p_sEventType].fire(p_oDOMEvent);return oItem;}}};YAHOO.widget.MenuModule.prototype._onDOMEvent = function (p_oEvent, p_oMenuModule) {var Event = this._oEventUtil;var oEventTypes = {"mousedown":"mouseDownEvent", "mouseup":"mouseUpEvent", "keydown":"keyDownEvent", "keyup":"keyUpEvent", "keypress":"keyPressEvent"};var sCustomEventType = oEventTypes[p_oEvent.type];var oTarget = Event.getTarget(p_oEvent);this._fireItemEvent(oTarget, sCustomEventType, p_oEvent);this[sCustomEventType].fire(p_oEvent);Event.stopPropagation(p_oEvent);};YAHOO.widget.MenuModule.prototype._onElementMouseOver = function (p_oEvent, p_oMenuModule) {var Event = this._oEventUtil;var oTarget = Event.getTarget(p_oEvent);if ((oTarget == this.element || this._oDom.isAncestor(this.element, oTarget)) && !this._bFiredMouseOverEvent) {this.mouseOverEvent.fire(p_oEvent);this._bFiredMouseOverEvent = true;this._bFiredMouseOutEvent = false;}if (!this._oCurrentItem) {this._oCurrentItem = this._fireItemEvent(oTarget, "mouseOverEvent", p_oEvent);}Event.stopPropagation(p_oEvent);};YAHOO.widget.MenuModule.prototype._onElementMouseOut = function (p_oEvent, p_oMenuModule) {var Dom = this._oDom;var Event = this._oEventUtil;var oRelatedTarget = Event.getRelatedTarget(p_oEvent);var bLIMouseOut = true;var bMovingToSubmenu = false;if (this._oCurrentItem && oRelatedTarget) {if (oRelatedTarget == this._oCurrentItem.element || Dom.isAncestor(this._oCurrentItem.element, oRelatedTarget)) {bLIMouseOut = false;}var oSubmenu = this._oCurrentItem.cfg.getProperty("submenu");if (oSubmenu && (oRelatedTarget == oSubmenu.element || Dom.isAncestor(oSubmenu.element, oRelatedTarget))) {bMovingToSubmenu = true;}}if (this._oCurrentItem && (bLIMouseOut || bMovingToSubmenu)) {this._oCurrentItem.mouseOutEvent.fire(p_oEvent);this._oCurrentItem = null;}if (!this._bFiredMouseOutEvent && (!Dom.isAncestor(this.element, oRelatedTarget) || bMovingToSubmenu)) {this.mouseOutEvent.fire(p_oEvent);this._bFiredMouseOutEvent = true;this._bFiredMouseOverEvent = false;}Event.stopPropagation(p_oEvent);};YAHOO.widget.MenuModule.prototype._onElementClick = function (p_oEvent, p_oMenuModule) {var Event = this._oEventUtil;var oTarget = Event.getTarget(p_oEvent);var oItem = this._fireItemEvent(oTarget, "clickEvent", p_oEvent);var bCurrentPageURL;if (oItem) {var sURL = oItem.cfg.getProperty("url");var oSubmenu = oItem.cfg.getProperty("submenu");bCurrentPageURL = (sURL.substr((sURL.length - 1), 1) == "#");if (oTarget == oItem.submenuIndicator && oSubmenu) {if (oSubmenu.cfg.getProperty("visible")) {oSubmenu.hide();} else {var oActiveItem = this.activeItem;if (oActiveItem && oActiveItem != this) {

⌨️ 快捷键说明

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