📄 menu.js
字号:
/******************************************************************************
Crossday Discuz! Board - Floating Advertisements for Discuz!
Copyright 2001-2006 Comsenz Inc. (http://www.comsenz.com)
*******************************************************************************/
var menuslidetimer = null;
function Popup_Handler() {
this.open_steps = 2;
this.open_fade = false;
this.active = false;
this.menus = new Array();
this.activemenu = null;
this.hidden_selects = new Array();
this.activate = function(active) {
this.active = active;
}
this.register = function(clickactive, controlkey, noimage) {
this.menus[controlkey] = new Popup_Menu(clickactive, controlkey, noimage);
return this.menus[controlkey];
}
this.hide = function() {
if(this.activemenu != null) this.menus[this.activemenu].hide();
}
}
function Popup_Events() {
this.controlobj_show = function(e) {
doane(e);
clearTimeout(this.slidetimer);
if(popupmenu.activemenu == null || popupmenu.menus[popupmenu.activemenu].controlkey != this.id) {popupmenu.menus[this.id].show(this, false, popupmenu.menus[this.id].clickactive);}
}
this.controlobj_onclick = function(e) {
doane(e);
if(popupmenu.activemenu == null || popupmenu.menus[popupmenu.activemenu].controlkey != this.id) {popupmenu.menus[this.id].show(this, false, popupmenu.menus[this.id].clickactive);}
else {popupmenu.menus[this.id].hide();}
}
this.controlobj_onmouseover = function(e) {
doane(e);
popupmenu.menus[this.id].hover(this);
}
this.menuoption_onclick_function = function(e) {
this.ofunc(e);
popupmenu.menus[this.controlkey].hide();
}
this.menuoption_onclick_link = function(e) {
popupmenu.menus[this.controlkey].choose(e, this);
}
this.menuoption_onmouseover = function(e) {
this.className = 'popupmenu_highlight';
}
this.menuoption_onmouseout = function(e) {
this.className = 'popupmenu_option';
}
}
popupmenu = new Popup_Handler();
popupevents = new Popup_Events();
function popupmenu_hide(e) {
if(e && e.button && e.button != 1 && e.type == 'click') return true;
else popupmenu.hide();
}
function Popup_Menu(clickactive, controlkey, noimage) {
this.controlkey = controlkey;
this.clickactive = clickactive;
this.menuname = this.controlkey.split('.')[0] + '_menu';
if($(this.menuname)) {this.init_menu(clickactive);}
this.slide_open = (is_opera ? false : true);
this.open_steps = popupmenu.open_steps;
this.init_control = function(noimage) {
this.controlobj = $(this.controlkey);
this.controlobj.state = false;
if(this.controlobj.firstChild && (this.controlobj.firstChild.tagName == 'TEXTAREA' || this.controlobj.firstChild.tagName == 'INPUT')) {
} else {
if(!this.clickactive && !noimage && !(is_mac && is_ie)) {
var img = document.createElement('img');
img.src = 'images/common/jsmenu.gif';
img.border = 0;
img.title = '';
img.alt = '';
this.controlobj.appendChild(img);
}
this.controlobj.unselectable = true;
if(!noimage) {
this.controlobj.style.cursor = is_ie ? 'hand' : 'pointer';
}
if(clickactive) {
this.controlobj.onclick = popupevents.controlobj_onclick;
this.controlobj.onmouseover = popupevents.controlobj_onmouseover;
} else {
this.controlobj.onmouseover = popupevents.controlobj_show;
}
}
}
this.init_control( noimage);
this.init_menu = function() {
this.menuobj = $(this.menuname);
if(this.menuobj && !this.menuobj.initialized) {
this.menuobj.initialized = true;
this.menuobj.onclick = ebygum;
this.menuobj.style.position = 'absolute';
if(!this.clickactive) {
this.menuobj.onmouseover = function() {
clearTimeout(menuslidetimer);
}
this.menuobj.onmouseout = function() {
menuslidetimer = setTimeout("menuhide()",500);
}
}
this.menuobj.style.zIndex = 50;
if(is_ie && !is_mac) {
this.menuobj.style.filter += "progid:DXImageTransform.Microsoft.shadow(direction=135,color=#CCCCCC,strength=2)";
}
this.init_menu_contents();
}
}
this.init_menu_contents = function() {
var tds = findtags(this.menuobj, 'td');
for(var i = 0; i < tds.length; i++) {
if(tds[i].className == 'popupmenu_option' || tds[i].className == 'editor_colornormal') {
if(is_ie && !is_mac) {
tds[i].style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity=85,finishOpacity=100,style=0)";
}
tds[i].style.opacity = 0.85;
if(tds[i].title && tds[i].title == 'nohighlight') {
tds[i].title = '';
} else {
tds[i].controlkey = this.controlkey;
if(tds[i].className != 'editor_colornormal') {
tds[i].onmouseover = popupevents.menuoption_onmouseover;
tds[i].onmouseout = popupevents.menuoption_onmouseout;
}
if(typeof tds[i].onclick == 'function') {
tds[i].ofunc = tds[i].onclick;
tds[i].onclick = popupevents.menuoption_onclick_function;
} else {
tds[i].onclick = popupevents.menuoption_onclick_link;
}
if(!is_saf && !is_kon) {
try {
links = findtags(tds[i], 'a');
for(var j = 0; j < links.length; j++) {
if(typeof links[j].onclick == 'undefined') links[j].onclick = ebygum;
}
}
catch(e) {}
}
}
}
}
}
this.show = function(obj, instant) {
if(!popupmenu.active){return false;}
else if(!this.menuobj) {this.init_menu();}
if(!this.menuobj) {return false;}
if(popupmenu.activemenu != null) {popupmenu.menus[popupmenu.activemenu].hide();}
popupmenu.activemenu = this.controlkey;
this.menuobj.style.display = '';
if(popupmenu.slide_open) {this.menuobj.style.clip = 'rect(auto, auto, auto, auto)';}
this.pos = this.fetch_offset(obj);
this.leftpx = this.pos['left'];
this.toppx = this.pos['top'] + obj.offsetHeight;
if((this.leftpx + this.menuobj.offsetWidth) >= document.body.clientWidth && (this.leftpx + obj.offsetWidth - this.menuobj.offsetWidth) > 0) {
this.leftpx = this.leftpx + obj.offsetWidth - this.menuobj.offsetWidth;
this.direction = 'right';
} else {this.direction = 'left';}
this.menuobj.style.left = this.leftpx + 'px';
this.menuobj.style.top = this.toppx + 'px';
if(!instant && this.slide_open) {
this.intervalX = Math.ceil(this.menuobj.offsetWidth / this.open_steps);
this.intervalY = Math.ceil(this.menuobj.offsetHeight / this.open_steps);
this.slide((this.direction == 'left' ? 0 : this.menuobj.offsetWidth), 0, 0);
} else if(this.menuobj.style.clip && popupmenu.slide_open) {
this.menuobj.style.clip = 'rect(auto, auto, auto, auto)';
}
this.handle_overlaps(true);
if(this.menuobj.scrollHeight > 400) {
this.menuobj.style.height = '400px';
if(is_ie || is_opera) {
this.menuobj.style.width = this.menuobj.scrollWidth + 18;
}
if(is_opera) {
this.menuobj.style.overflow = 'scroll';
} else {
this.menuobj.style.overflowY = 'scroll';
}
}
}
this.hide = function(e) {
if(e && e.button && e.button != 1) {return true;}
this.stop_slide();
this.menuobj.style.display = 'none';
this.handle_overlaps(false);
popupmenu.activemenu = null;
}
this.slidehide = function() {
popupmenu.menus[popupmenu.activemenu].hide()
}
this.hover = function(obj, clickactive) {
if(popupmenu.activemenu != null) {
if(popupmenu.menus[popupmenu.activemenu].controlkey != this.id) {this.show(obj, true, clickactive);}
}
}
this.choose = function(e, obj) {
var links = findtags(obj, 'a');
if(links[0]) {
if(is_ie) {
links[0].click();
window.event.cancelBubble = true;
} else {
if(e.shiftKey) {
window.open(links[0].href);
e.stopPropagation();
e.preventDefault();
} else {
window.location = links[0].href;
e.stopPropagation();
e.preventDefault();
}
}
this.hide();
}
}
this.slide = function(clipX, clipY, opacity) {
if(this.direction == 'left' && (clipX < this.menuobj.offsetWidth || clipY < this.menuobj.offsetHeight)) {
if(popupmenu.open_fade && is_ie) {
opacity += 10;
this.menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = opacity;
}
clipX += this.intervalX;
clipY += this.intervalY;
this.menuobj.style.clip = "rect(auto, " + clipX + "px, " + clipY + "px, auto)";
this.slidetimer = setTimeout("popupmenu.menus[popupmenu.activemenu].slide(" + clipX + ", " + clipY + ", " + opacity + ");", 0);
} else if(this.direction == 'right' && (clipX > 0 || clipY < this.menuobj.offsetHeight)) {
if(popupmenu.open_fade && is_ie) {
opacity += 10;
menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = opacity;
}
clipX -= this.intervalX;
clipY += this.intervalY;
this.menuobj.style.clip = "rect(auto, " + this.menuobj.offsetWidth + "px, " + clipY + "px, " + clipX + "px)";
this.slidetimer = setTimeout("popupmenu.menus[popupmenu.activemenu].slide(" + clipX + ", " + clipY + ", " + opacity + ");", 0);
} else {this.stop_slide();}
}
this.stop_slide = function() {
clearTimeout(this.slidetimer);
this.menuobj.style.clip = 'rect(auto, auto, auto, auto)';
if(popupmenu.open_fade && is_ie) {this.menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = 100;}
}
this.fetch_offset = function(obj) {
var left_offset = obj.offsetLeft;
var top_offset = obj.offsetTop;
while ((obj = obj.offsetParent) != null) {
left_offset += obj.offsetLeft;
top_offset += obj.offsetTop;
}
return { 'left' : left_offset, 'top' : top_offset };
}
this.overlaps = function(obj, m) {
var s = new Array();
var pos = this.fetch_offset(obj);
s['L'] = pos['left'];
s['T'] = pos['top'];
s['R'] = s['L'] + obj.offsetWidth;
s['B'] = s['T'] + obj.offsetHeight;
if(s['L'] > m['R'] || s['R'] < m['L'] || s['T'] > m['B'] || s['B'] < m['T']) {return false;}
return true;
}
this.handle_overlaps = function(dohide) {
if(is_ie) {
var selects = findtags(document, 'select');
if(dohide) {
var menuarea = new Array(); menuarea = {
'L' : this.leftpx,
'R' : this.leftpx + this.menuobj.offsetWidth,
'T' : this.toppx,
'B' : this.toppx + this.menuobj.offsetHeight
};
for(var i = 0; i < selects.length; i++) {
if(this.overlaps(selects[i], menuarea)) {
var hide = true;
var s = selects[i];
while (s = s.parentNode) {
if(s.className == 'popupmenu_popup') {
hide = false;
break;
}
}
if(hide) {
selects[i].style.visibility = 'hidden';
arraypush(popupmenu.hidden_selects, i);
}
}
}
} else {
while (true) {
var i = arraypop(popupmenu.hidden_selects);
if(typeof i == 'undefined' || i == null) break;
else selects[i].style.visibility = 'visible';
}
}
}
}
}
function doane(eventobj) {
if(!eventobj || is_ie) {
window.event.returnValue = false;
window.event.cancelBubble = true;
return window.event;
} else {
eventobj.stopPropagation();
eventobj.preventDefault();
return eventobj;
}
}
function ebygum(eventobj) {
if(!eventobj || is_ie) {
window.event.cancelBubble = true;
return window.event;
} else {
if(eventobj.target.type == 'submit') eventobj.target.form.submit();
eventobj.stopPropagation();
return eventobj;
}
}
function menuregister(clickactive, controlid, noimage, datefield) {
if(typeof popupmenu == 'object') {
popupmenu.register(clickactive, controlid, noimage);
}
}
function menuhide() {
if(popupmenu.activemenu != null) {
popupmenu.menus[popupmenu.activemenu].slidehide();
}
}
if(typeof popupmenu == 'object') {
if(window.attachEvent && !is_saf) {
document.attachEvent('onclick', popupmenu_hide);
window.attachEvent('onresize', popupmenu_hide);
} else if(document.addEventListener && !is_saf) {
document.addEventListener('click', popupmenu_hide, false);
window.addEventListener('resize', popupmenu_hide, false);
} else {
window.onclick = popupmenu_hide;
window.onresize = popupmenu_hide;
}
popupmenu.activate(true);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -