📄 menu.js
字号:
/*
[Discuz!] (C)2001-2007 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$RCSfile: menu.js,v $
$Revision: 1.65.2.1 $
$Date: 2007/07/24 17:50:16 $
*/
var jsmenu = new Array();
var ctrlobjclassName;
jsmenu['active'] = new Array();
jsmenu['timer'] = new Array();
jsmenu['iframe'] = new Array();
function initCtrl(ctrlobj, click, duration, timeout, layer) {
if(ctrlobj && !ctrlobj.initialized) {
ctrlobj.initialized = true;
ctrlobj.unselectable = true;
ctrlobj.outfunc = typeof ctrlobj.onmouseout == 'function' ? ctrlobj.onmouseout : null;
ctrlobj.onmouseout = function() {
if(this.outfunc) this.outfunc();
if(duration < 3) jsmenu['timer'][ctrlobj.id] = setTimeout('hideMenu(' + layer + ')', timeout);
}
if(click && duration) {
ctrlobj.clickfunc = typeof ctrlobj.onclick == 'function' ? ctrlobj.onclick : null;
ctrlobj.onclick = function (e) {
doane(e);
if(jsmenu['active'][layer] == null || jsmenu['active'][layer].ctrlkey != this.id) {
if(this.clickfunc) this.clickfunc();
else showMenu(this.id, true);
} else {
hideMenu(layer);
}
}
}
ctrlobj.overfunc = typeof ctrlobj.onmouseover == 'function' ? ctrlobj.onmouseover : null;
ctrlobj.onmouseover = function(e) {
doane(e);
if(this.overfunc) this.overfunc();
if(click) {
clearTimeout(jsmenu['timer'][this.id]);
} else {
for(var id = 0; id < jsmenu['timer'].length; id++) {
if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]);
}
}
}
}
}
function initMenu(ctrlid, menuobj, duration, timeout, layer) {
if(menuobj && !menuobj.initialized) {
menuobj.initialized = true;
menuobj.ctrlkey = ctrlid;
menuobj.onclick = ebygum;
menuobj.style.position = 'absolute';
if(duration < 3) {
if(duration > 1) {
menuobj.onmouseover = function() {
clearTimeout(jsmenu['timer'][ctrlid]);
}
}
if(duration != 1) {
menuobj.onmouseout = function() {
jsmenu['timer'][ctrlid] = setTimeout('hideMenu(' + layer + ')', timeout);
}
}
}
menuobj.style.zIndex = 50;
if(is_ie) {
menuobj.style.filter += "progid:DXImageTransform.Microsoft.shadow(direction=135,color=#CCCCCC,strength=2)";
}
}
}
function showMenu(ctrlid, click, offset, duration, timeout, layer, showid, maxh, containerid) {
e = window.event ? window.event : showMenu.caller.arguments[0];
var ctrlobj = $(ctrlid);
if(!ctrlobj) return;
if(isUndefined(click)) click = false;
if(isUndefined(offset)) offset = 0;
if(isUndefined(duration)) duration = 2;
if(isUndefined(timeout)) timeout = 500;
if(isUndefined(layer)) layer = 0;
if(isUndefined(showid)) showid = ctrlid;
var showobj = $(showid);
var menuobj = $(showid + '_menu');
if(!showobj|| !menuobj) return;
if(isUndefined(maxh)) maxh = 400;
hideMenu(layer);
for(var id = 0; id < jsmenu['timer'].length; id++) {
if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]);
}
initCtrl(ctrlobj, click, duration, timeout, layer);
ctrlobjclassName = ctrlobj.className;
ctrlobj.className += ' hover';
initMenu(ctrlid, menuobj, duration, timeout, layer);
menuobj.style.display = '';
if(!is_opera) {
menuobj.style.clip = 'rect(auto, auto, auto, auto)';
}
setMenuPosition(showid, offset, containerid);
if(is_ie && is_ie < 7) {
if(!jsmenu['iframe'][layer]) {
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.style.position = 'absolute';
iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
try {
$('append_parent').appendChild(iframe);
}
catch(e) {
//for Discuz!NT
}
jsmenu['iframe'][layer] = iframe;
}
jsmenu['iframe'][layer].style.top = menuobj.style.top;
jsmenu['iframe'][layer].style.left = menuobj.style.left;
jsmenu['iframe'][layer].style.width = menuobj.w;
jsmenu['iframe'][layer].style.height = menuobj.h;
jsmenu['iframe'][layer].style.display = 'block';
}
if(maxh && menuobj.scrollHeight > maxh) {
menuobj.style.height = maxh + 'px';
if(is_opera) {
menuobj.style.overflow = 'auto';
} else {
menuobj.style.overflowY = 'auto';
}
}
if(!duration) {
setTimeout('hideMenu(' + layer + ')', timeout);
}
jsmenu['active'][layer] = menuobj;
}
function setMenuPosition(showid, offset, containerid) {
var showobj = $(showid);
var menuobj = $(showid + '_menu');
var container = $(containerid);
if(isUndefined(offset)) offset = 0;
if(showobj) {
showobj.pos = fetchOffset(showobj);
if (container)
{
showobj.X = showobj.pos['left'] - container.offsetLeft;
showobj.Y = 0;
}
else
{
showobj.X = showobj.pos['left'];
showobj.Y = showobj.pos['top'];
}
showobj.w = showobj.offsetWidth;
showobj.h = showobj.offsetHeight;
menuobj.w = menuobj.offsetWidth;
menuobj.h = menuobj.offsetHeight;
menuobj.style.left = (showobj.X + menuobj.w > document.body.clientWidth) && (showobj.X + showobj.w - menuobj.w >= 0) ? showobj.X + showobj.w - menuobj.w + 'px' : showobj.X + 'px';
menuobj.style.top = offset == 1 ? showobj.Y + 'px' : (offset == 2 || ((showobj.Y + showobj.h + menuobj.h > document.documentElement.scrollTop + document.documentElement.clientHeight) && (showobj.Y - menuobj.h >= 0)) ? (showobj.Y - menuobj.h) + 'px' : showobj.Y + showobj.h + 'px');
if(menuobj.style.clip && !is_opera) {
menuobj.style.clip = 'rect(auto, auto, auto, auto)';
}
}
}
function hideMenu(layer) {
if(isUndefined(layer)) layer = 0;
if(jsmenu['active'][layer]) {
try {
$(jsmenu['active'][layer].ctrlkey).className = ctrlobjclassName;
} catch(e) {}
clearTimeout(jsmenu['timer'][jsmenu['active'][layer].ctrlkey]);
jsmenu['active'][layer].style.display = 'none';
if(is_ie && is_ie < 7 && jsmenu['iframe'][layer]) {
jsmenu['iframe'][layer].style.display = 'none';
}
jsmenu['active'][layer] = null;
}
}
function fetchOffset(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 };
}
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 menuoption_onclick_function(e) {
this.clickfunc();
hideMenu();
}
function menuoption_onclick_link(e) {
choose(e, this);
}
function menuoption_onmouseover(e) {
this.className = 'popupmenu_highlight';
}
function menuoption_onmouseout(e) {
this.className = 'popupmenu_option';
}
function choose(e, obj) {
var links = obj.getElementsByTagName('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();
}
}
hideMenu();
}
}
function setBubble(showid, tipname) {
var menuobj = $(showid + '_menu');
menuobj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
menuobj.style.opacity = 0;
_attachEvent(window, 'load', function() { initBubble(showid, tipname) });
_attachEvent(window, 'resize', function() { initBubble(showid, tipname, true) });
}
function initBubble(showid, tipname, onresize) {
var menuid = showid + "_menu";
var showobj = $(showid);
var menuobj = $(showid + '_menu');
var offset = 0;
if (showobj) {
showobj.pos = fetchOffset(showobj);
showobj.X = showobj.pos['left'];
showobj.Y = showobj.pos['top'];
showobj.w = showobj.offsetWidth;
showobj.h = showobj.offsetHeight;
if (menuobj.style.display == 'none'){
menuobj.style.visibility = 'hidden';
menuobj.style.display = '';
menuobj.w = menuobj.offsetWidth;
menuobj.h = menuobj.offsetHeight;
menuobj.style.visibility = 'visible';
menuobj.style.display = 'none';
} else {
menuobj.w = menuobj.offsetWidth;
menuobj.h = menuobj.offsetHeight;
}
menuobj.style.left = (showobj.X + menuobj.w > document.body.clientWidth) && (showobj.X + showobj.w - menuobj.w >= 0) ? showobj.X + showobj.w - menuobj.w + 'px' : showobj.X + 'px';
menuobj.style.top = offset == 1 ? showobj.Y + 'px' : (offset == 2 || ((showobj.Y + showobj.h + menuobj.h > document.documentElement.scrollTop + document.documentElement.clientHeight) && (showobj.Y - menuobj.h >= 0)) ? (showobj.Y - menuobj.h) + 'px' : showobj.Y + showobj.h + 'px');
if (menuobj.style.clip && !is_opera) {
menuobj.style.clip = 'rect(auto, auto, auto, auto)';
}
}
$(menuid).style.top = parseInt($(menuid).style.top) - menuobj.h - 18 + 'px';
$(menuid).style.left = parseInt($(menuid).style.left) + 5 + 'px';
$(menuid).style.height = menuobj.h;
menuobj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=100)';
menuobj.style.opacity = 1;
if (typeof onresize != 'undefined' && onresize === true)
return;
if (getcookie('discuz_tips_' + tipname) == "1") {
menuobj.style.display = 'none';
} else {
setTimeout('display_opacity(\'' + menuid + '\',100)', 8000);
setcookie('discuz_tips_' + tipname, 1, 365*24*60*60);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -