📄 menu1.js
字号:
GDNetMenuDown.spacerGif = "/images/x.gif";
GDNetMenuDown.dingbatOn = "/images/expand-1.gif";
GDNetMenuDown.dingbatOff = "/images/expand-0.gif";
GDNetMenuDown.dingbatSize = 14;
GDNetMenuDown.menuPadding = 1;
GDNetMenuDown.itemPadding = 4;
GDNetMenuDown.shadowSize = 2;
GDNetMenuDown.shadowOffset = 3;
GDNetMenuDown.shadowColor = "#eeeeee";
GDNetMenuDown.backgroundColor = "#eeeeee";
GDNetMenuDown.hideDelay = 100;
GDNetMenuDown.slideTime = 100;
GDNetMenuDown.reference = {topLeft:1,topRight:2,bottomLeft:3,bottomRight:4};
GDNetMenuDown.direction = {down:1,right:2};
GDNetMenuDown.registry = [];
GDNetMenuDown._maxZ = 100;
GDNetMenuDown.isSupported = function() {
if (typeof GDNetMenuDown.isSupported.r == "boolean")
return GDNetMenuDown.isSupported.r;
var ua = navigator.userAgent.toLowerCase();
var an = navigator.appName;
var r = false;
if (ua.indexOf("gecko") > -1) r = true;
else if (an == "Microsoft Internet Explorer") {
if (document.getElementById) r = true;
}
GDNetMenuDown.isSupported.r = r;
return r;
}
GDNetMenuDown.initialize = function() {
for (var i = 0, menu = null; menu = this.registry[i]; i++) {
menu.initialize();
}
}
GDNetMenuDown.renderAll = function() {
var aMenuHtml = [];
for (var i = 0, menu = null; menu = this.registry[i]; i++) {
aMenuHtml[i] = menu.toString();
}
document.write(aMenuHtml.join(""));
}
function GDNetMenuDown(oActuator, iDirection, iLeft, iTop, iReferencePoint, parentMenuSet) {
this.addItem = addItem;
this.addMenu = addMenu;
this.toString = toString;
this.initialize = initialize;
this.isOpen = false;
this.show = show;
this.hide = hide;
this.items = [];
this.onactivate = new Function();
this.ondeactivate = new Function();
this.onmouseover = new Function();
this.onqueue = new Function();
this.index = GDNetMenuDown.registry.length;
GDNetMenuDown.registry[this.index] = this;
var id = "GDNetMenuDown" + this.index;
var contentHeight = null;
var contentWidth = null;
var childMenuSet = null;
var animating = false;
var childMenus = [];
var slideAccel = -1;
var elmCache = null;
var ready = false;
var _this = this;
var a = null;
var pos = iDirection == GDNetMenuDown.direction.down ? "top" : "left";
var dim = null;
function addItem(sText, sUrl) {
var item = new GDNetMenuDownItem(sText, sUrl, this);
item._index = this.items.length;
this.items[item._index] = item;
}
function addMenu(oMenuItem) {
if (!oMenuItem.parentMenu == this) throw new Error("Cannot add a menu here");
if (childMenuSet == null) childMenuSet = new GDNetMenuDownSet(GDNetMenuDown.direction.right, -5, 2, GDNetMenuDown.reference.topRight);
var m = childMenuSet.addMenu(oMenuItem);
childMenus[oMenuItem._index] = m;
m.onmouseover = child_mouseover;
m.ondeactivate = child_deactivate;
m.onqueue = child_queue;
return m;
}
function initialize() {
initCache();
initEvents();
initSize();
ready = true;
}
function show() {
if (ready) {
_this.isOpen = true;
animating = true;
setContainerPos();
elmCache["clip"].style.visibility = "visible";
elmCache["clip"].style.zIndex = GDNetMenuDown._maxZ++;
slideStart();
_this.onactivate();
}
}
function hide() {
if (ready) {
_this.isOpen = false;
animating = true;
for (var i = 0, item = null; item = elmCache.item[i]; i++)
dehighlight(item);
if (childMenuSet) childMenuSet.hide();
slideStart();
_this.ondeactivate();
}
}
function setContainerPos() {
var sub = oActuator.constructor == GDNetMenuDownItem;
var act = sub ? oActuator.parentMenu.elmCache["item"][oActuator._index] : oActuator;
var el = act;
var x = 0;
var y = 0;
var minX = 0;
var maxX = (window.innerWidth ? window.innerWidth : document.body.clientWidth) - parseInt(elmCache["clip"].style.width);
var minY = 0;
var maxY = (window.innerHeight ? window.innerHeight : document.body.clientHeight) - parseInt(elmCache["clip"].style.height);
while (sub ? el.parentNode.className.indexOf("GDNetMenuDownMenu") == -1 : el.offsetParent) {
x += el.offsetLeft;
y += el.offsetTop;
if (el.scrollLeft) x -= el.scrollLeft;
if (el.scrollTop) y -= el.scrollTop;
el = el.offsetParent;
}
if (oActuator.constructor == GDNetMenuDownItem) {
x += parseInt(el.parentNode.style.left);
y += parseInt(el.parentNode.style.top);
}
switch (iReferencePoint) {
case GDNetMenuDown.reference.topLeft:
break;
case GDNetMenuDown.reference.topRight:
x += act.offsetWidth;
break;
case GDNetMenuDown.reference.bottomLeft:
y += act.offsetHeight;
break;
case GDNetMenuDown.reference.bottomRight:
x += act.offsetWidth;
y += act.offsetHeight;
break;
}
x += iLeft;
y += iTop;
x = Math.max(Math.min(x, maxX), minX);
y = Math.max(Math.min(y, maxY), minY);
elmCache["clip"].style.left = x + "px";
elmCache["clip"].style.top = y + "px";
}
function slideStart() {
var x0 = parseInt(elmCache["content"].style[pos]);
var x1 = _this.isOpen ? 0 : -dim;
if (a != null) a.stop();
a = new Accelimation(x0, x1, GDNetMenuDown.slideTime, slideAccel);
a.onframe = slideFrame;
a.onend = slideEnd;
a.start();
}
function slideFrame(x) {
elmCache["content"].style[pos] = x + "px";
}
function slideEnd() {
if (!_this.isOpen) elmCache["clip"].style.visibility = "hidden";
animating = false;
}
function initSize() {
var ow = elmCache["items"].offsetWidth;
var oh = elmCache["items"].offsetHeight;
var ua = navigator.userAgent.toLowerCase();
elmCache["clip"].style.width = ow + GDNetMenuDown.shadowSize + 2 + "px";
elmCache["clip"].style.height = oh + GDNetMenuDown.shadowSize + 2 + "px";
elmCache["content"].style.width = ow + GDNetMenuDown.shadowSize + "px";
elmCache["content"].style.height = oh + GDNetMenuDown.shadowSize + "px";
contentHeight = oh + GDNetMenuDown.shadowSize;
contentWidth = ow + GDNetMenuDown.shadowSize;
dim = iDirection == GDNetMenuDown.direction.down ? contentHeight : contentWidth;
elmCache["content"].style[pos] = -dim - GDNetMenuDown.shadowSize + "px";
elmCache["clip"].style.visibility = "hidden";
if (ua.indexOf("mac") == -1 || ua.indexOf("gecko") > -1) {
elmCache["background"].style.width = ow + "px";
elmCache["background"].style.height = oh + "px";
elmCache["background"].style.backgroundColor = GDNetMenuDown.backgroundColor;
elmCache["shadowRight"].style.left = ow + "px";
elmCache["shadowRight"].style.height = oh - (GDNetMenuDown.shadowOffset - GDNetMenuDown.shadowSize) + "px";
elmCache["shadowRight"].style.backgroundColor = GDNetMenuDown.shadowColor;
elmCache["shadowBottom"].style.top = oh + "px";
elmCache["shadowBottom"].style.width = ow - GDNetMenuDown.shadowOffset + "px";
elmCache["shadowBottom"].style.backgroundColor = GDNetMenuDown.shadowColor;
}
else {
elmCache["background"].firstChild.src = GDNetMenuDown.backgroundPng;
elmCache["background"].firstChild.width = ow;
elmCache["background"].firstChild.height = oh;
elmCache["shadowRight"].firstChild.src = GDNetMenuDown.shadowPng;
elmCache["shadowRight"].style.left = ow + "px";
elmCache["shadowRight"].firstChild.width = GDNetMenuDown.shadowSize;
elmCache["shadowRight"].firstChild.height = oh - (GDNetMenuDown.shadowOffset - GDNetMenuDown.shadowSize);
elmCache["shadowBottom"].firstChild.src = GDNetMenuDown.shadowPng;
elmCache["shadowBottom"].style.top = oh + "px";
elmCache["shadowBottom"].firstChild.height = GDNetMenuDown.shadowSize;
elmCache["shadowBottom"].firstChild.width = ow - GDNetMenuDown.shadowOffset;
}
}
function initCache() {
var menu = document.getElementById(id);
var all = menu.all ? menu.all : menu.getElementsByTagName("*");
elmCache = {};
elmCache["clip"] = menu;
elmCache["item"] = [];
for (var i = 0, elm = null; elm = all[i]; i++) {
switch (elm.className) {
case "items":
case "content":
case "background":
case "shadowRight":
case "shadowBottom":
elmCache[elm.className] = elm;
break;
case "item":
elm._index = elmCache["item"].length;
elmCache["item"][elm._index] = elm;
break;
}
}
_this.elmCache = elmCache;
}
function initEvents() {
for (var i = 0, item = null; item = elmCache.item[i]; i++) {
item.onmouseover = item_mouseover;
item.onmouseout = item_mouseout;
item.onclick = item_click;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -