📄 taskmenu.js
字号:
if( (this.menuBody.offsetTop + this.operationStep) < titlebarBottom )
{
this.menuBody.style.top = (this.menuBody.offsetTop + this.operationStep) + "px";
this.menuBody.style.clip = "rect(" + (titlebarBottom - this.menuBody.offsetTop) + " auto " + (this.menuBody.offsetHeight - 1) + " auto)";
this._setAlphaOpacity( this._getAlphaOpacity() + CFG_ALPHA_STEP );
this.operationTimer = setTimeout("TaskMenu.collection[" + this.menuID + "]._open()",this.operationSleep);
this.operationSleep += 5;
}
else
{
this.menuBody.style.top = titlebarBottom + "px";
this.menuBody.style.clip = "rect(auto auto auto auto)";
this._attachState(TaskMenuState.open);
this._setAlphaOpacity(100);
}
if(this.next) this.next._moveTo();
TaskMenu._refreshAll();
}
this._close = function()
{
var menuBodyHeight = this._getMenuHeight();
var menuBodyBottom = this.menuBody.offsetTop + menuBodyHeight;
var titlebarBottom = this.titlebar.offsetTop + CFG_TITLEBAR_HEIGHT;
if( (menuBodyBottom - this.operationStep) > titlebarBottom )
{
this.menuBody.style.top = (this.menuBody.offsetTop - this.operationStep) + "px";
this._setAlphaOpacity( this._getAlphaOpacity() - CFG_ALPHA_STEP );
this.operationTimer = setTimeout("TaskMenu.collection[" + this.menuID + "]._close()",this.operationSleep);
this.operationSleep += 5;
}
else
{
this.menuBody.style.top = ( (titlebarBottom - menuBodyHeight) ) + "px";
this._setAlphaOpacity(0);
this._attachState(TaskMenuState.close);
}
this.menuBody.style.clip = "rect(" + (Math.abs(titlebarBottom - this.menuBody.offsetTop)) +" auto " + (this.menuBody.offsetHeight - 1) + " auto)";
if(this.next) this.next._moveTo();
TaskMenu._refreshAll();
}
this._moveBy = function(dist)
{}
this._moveTo = function()
{
var primTop = this.titlebar.offsetTop;
var safePoint = this.previous.titlebar.offsetTop + CFG_TITLEBAR_HEIGHT + CFG_MENU_SPACING;
var dstiTop = this.previous.menuBody.offsetTop + this.previous.menuBody.offsetHeight + CFG_MENU_SPACING;
if(dstiTop >= safePoint)
this.titlebar.style.top = dstiTop + "px";
else
this.titlebar.style.top = safePoint + "px";
if(this.state & TaskMenuState.open)
this.menuBody.style.top = ( this.titlebar.offsetTop + CFG_TITLEBAR_HEIGHT ) + "px";
else if(this.state & TaskMenuState.close)
this.menuBody.style.top = ( this.titlebar.offsetTop + CFG_TITLEBAR_HEIGHT - this.menuBody.offsetHeight) + "px";
else if(this.state & TaskMenuState.opening || this.state & TaskMenuState.closing)
this.menuBody.style.top = (this.menuBody.offsetTop + (dstiTop - primTop) ) + "px";
if(this.next != null) this.next._moveTo();
}
this.init = function(initFlag)
{
if(initFlag != true && (this.titlebr != null || this.menuBody != null))return;
this.state = (this.state == false)? TaskMenuState.close : TaskMenuState.open;
this.label = (this.label == null )? new String() : this.label.toString();
var fixString = (CFG_IS_SPECIAL_HEAD_NODE == true && TaskMenu.headNode == null)? "_Head" : "";
with(this.titlebar = document.createElement("DIV"))
{
className = "MenuTitlebar";
style.top = ((TaskMenu.headNode == null)? CFG_DOCUMENT_MARGIN : (TaskMenu.rearNode.menuBody.offsetTop + TaskMenu.rearNode.menuBody.offsetHeight + CFG_MENU_SPACING)) + "px";
style.left = CFG_DOCUMENT_MARGIN + "px";
style.width = (CFG_MENU_WIDTH + ( (INF_IS_IEXPLORER)? 0 : ( -2 * CFG_TITLEBAR_BORDER_WIDTH ) ) - this._getScrollWidth()) + "px";
style.height = CFG_TITLEBAR_HEIGHT + "px";
}
with(titlebarContainer = document.createElement("TABLE"))
{
cellPadding = "0";
cellSpacing = "0";
}
with(titlebarRow = titlebarContainer.insertRow(0))
{
style.width = CFG_MENU_WIDTH + "px";
style.height = CFG_TITLEBAR_HEIGHT + "px";
}
JS.addListener(titlebarRow,"click",TaskMenu._onClick,false);
JS.addListener(titlebarRow,"mouseover",TaskMenu._onMouseBehavior,false);
JS.addListener(titlebarRow,"mouseout",TaskMenu._onMouseBehavior,false);
with(leftCell = titlebarRow.insertCell(0))
{
className = "MenuTitlebarLeft" + fixString;
style.width = CFG_TITLEBAR_LEFT_WIDTH + "px";
}
leftCell.reflectClass = this;
with(middleCell = titlebarRow.insertCell(1))
{
className = "MenuTitlebarMiddle" + fixString;
style.width = ( CFG_TITLEBAR_MIDDLE_WIDTH - this._getScrollWidth() ) + "px";
with(this.hLabel = appendChild(document.createElement("DIV")))
{
className = "MenuTitle" + fixString;
style.width = (CFG_TITLEBAR_MIDDLE_WIDTH - this._getScrollWidth()) + "px";
style.height = (CFG_TITLEBAR_HEIGHT) + "px";
style.lineHeight = (CFG_TITLEBAR_HEIGHT) + "px";
}
this.hLabel.reflectClass = this;
}
middleCell.reflectClass = this;
with(this.hArrayCell = titlebarRow.insertCell(2))
{
className = "MenuTitlebarRight" + ((this.state == TaskMenuState.close)? "_Close" : "_Open") + fixString;
style.width = CFG_TITLEBAR_RIGHT_WIDTH + "px";
}
this.hArrayCell.reflectClass = this;
this.setLabel(this.getLabel());
this.titlebar.appendChild(titlebarContainer);
document.body.appendChild(this.titlebar);
with(this.menuBody = document.createElement("DIV"))
{
className = "MenuBody" + fixString;
style.cssText = "border-width:0px " + CFG_MENUBODY_BORDER_WIDTH + "px " + CFG_MENUBODY_BORDER_WIDTH + "px " + CFG_MENUBODY_BORDER_WIDTH + "px; " + ( (this.background != null)? "background-image:url('" + this.background + "');" : "" );
style.top = ( parseInt(this.titlebar.style.top) + CFG_TITLEBAR_HEIGHT ) + "px";
style.left = CFG_DOCUMENT_MARGIN + "px";
style.width = ( CFG_MENU_WIDTH + ( (INF_IS_IEXPLORER)? 0 : - (2 * CFG_MENUBODY_BORDER_WIDTH)) - ((INF_IS_SCROLLBAR_ENABLED)? CFG_SCROLLBAR_WIDTH : 0) ) + "px";
style.height = "auto";
style.padding = CFG_MENUBODY_PADDING + "px 0px";
style.MozOpacity = 1.0;
}
document.body.appendChild(this.menuBody);
if(TaskMenu.headNode == null)
TaskMenu.headNode = this;
else
TaskMenu.rearNode.next = this;
this.previous = TaskMenu.rearNode;
TaskMenu.rearNode = this;
this.menuID = TaskMenu.collection.push(this) - 1;
if(this.items.length > 0)
{
this._setMenuFixed(false);
this._appendItems();
this._setMenuFixed(true);
}
this._setMenuHeight(this._getMenuHeight());
if(this.state == TaskMenuState.close)
{
this._fixedMenuPosWhileClose();
}
TaskMenu._refreshAll();
}
this.add = function(taskMenuItems,iPosition)
{
var nItem = new Array();
if(taskMenuItems instanceof Array)
{
for(var i = 0; i < taskMenuItems.length; i++)
{
if(taskMenuItems[i] instanceof TaskMenuItem)
{
(dstItem = (taskMenuItems[i].container == null)? taskMenuItems[i] : taskMenuItems[i].cloneNode()).container = this;
nItem.push(dstItem);
}
}
}
else if(taskMenuItems instanceof TaskMenuItem)
{
(nItem[0] = (taskMenuItems.container == null)? taskMenuItems : taskMenuItems.cloneNode()).container = this;
}
else
return;
if(iPosition == null || typeof iPosition != "number" || iPosition < 0 || iPosition > nItem.Length)
{
iPosition = this.items.length;
}
this.items = this.items.slice(0,iPosition).concat( nItem , this.items.slice(iPosition ) );
this._setMenuFixed(true);
this._clearMenu();
this._appendItems();
this._invalidate();
}
this.remove = function(arg1,arg2)
{
var deletedItems = new Array();
if(arguments.length == 2 && typeof arg1 == "number" && typeof arg2 == "number")
{
deletedItems = this.items.splice(arg1,arg2);
}
else if(arguments.length == 1 && typeof arg1 == "number")
{
deletedItems = this.items.splice(arg1,1);
}
else if(arguments.length == 1 && arg1 instanceof TaskMenuItem)
{
for(var i = 0; i < this.items.length; i++)
{
if(this.items[i] == arg1)
{
deletedItems = this.items.splice(i,1);
break;
}
}
}
else if(arguments.length == 0)
{
this.clear();
}
else
{
alert("Error at TaskMenu.remove");
return;
}
for(var i = 0; i < deletedItems.length; i++)
{
deletedItems[i].container = null;
}
this._clearMenu();
this._appendItems();
this._invalidate();
}
this.item = function(n)
{
if(typeof n == "number")
return this.items[n];
}
this.clear = function()
{
clearTimeout(this.transformTimer);
this._removeState(TaskMenuState.transforming);
this._clearItem();
this._clearMenu();
this._invalidate();
}
this.setLabel = function(label)
{
this.label = (label == null)? new String() : label.toString();
with(this.hLabel)
{
(INF_IS_IEXPLORER)? innerText = this.label : textContent = this.label;
}
this.titlebar.title = this.label;
}
this.getLabel = function()
{
return this.label;
}
this.setBackground = function(srcImage)
{
this.background = srcImage;
if(this.titlebar != null && this.menuBody != null)
{
if(srcImage != null)
this.menuBody.style.backgroundImage = "url(" + srcImage + ")";
else
this.menuBody.style.backgroundImage = "url()";
}
}
this.invalidate = function()
{
if(this.titlebar == null || this.menuBody == null) return;
var nScrollHeight = this._getMenuHeight();
var tfDistance = nScrollHeight - this.menuBody.offsetHeight;
if(tfDistance == 0) return;
clearTimeout(this.transformTimer);
clearTimeout(this.invalidateTimer);
this._attachState(TaskMenuState.transforming);
this.transformSleep = CFG_SLEEP_TIME_BEGIN;
this.transformStep = (tfDistance > 0)? Math.ceil(tfDistance / CFG_FRAME_COUNT) : Math.floor(tfDistance / CFG_FRAME_COUNT);
if(this.state & TaskMenuState.closing)
this.operationStep = Math.ceil(nScrollHeight / CFG_FRAME_COUNT);
if(tfDistance > 0)
this.invalidateTimer = setTimeout("TaskMenu.collection[" + this.menuID + "]._extend()",50);
else
this.invalidateTimer = setTimeout("TaskMenu.collection[" + this.menuID + "]._shorten()",50);
}
this.click = function()
{
clearTimeout(this.operationTimer);
this.operationSleep = CFG_SLEEP_TIME_BEGIN;
var nodeTypeFix = (this._isSpecialHeadNode())? "_Head" : "";
this.operationStep = Math.ceil(this._getMenuHeight() / CFG_FRAME_COUNT);
if(this.state & TaskMenuState.open || this.state & TaskMenuState.opening)
{
this._attachState(TaskMenuState.closing);
this.hArrayCell.className = "MenuTitlebarRight_Close_MouseOver" + nodeTypeFix;
this._close();
}
else if(this.state & TaskMenuState.close ||this.state & TaskMenuState.closing)
{
this._attachState(TaskMenuState.opening);
this.hArrayCell.className = "MenuTitlebarRight_Open_MouseOver" + nodeTypeFix;
this._open();
}
}
}
TaskMenu.headNode = null;
TaskMenu.rearNode = null;
TaskMenu.collection = new Array();
TaskMenu._isScrollbarEnabled = function()
{
return (TaskMenu.rearNode.menuBody.offsetTop + TaskMenu.rearNode.menuBody.offsetHeight) > document.body.clientHeight;
}
TaskMenu._isScrollbarChanged = function()
{
var currentScrollbarStatus;
try
{
currentScrollbarStatus = TaskMenu._isScrollbarEnabled();
return INF_IS_SCROLLBAR_ENABLED != currentScrollbarStatus;
}
catch(ex)
{
return false;
}
finally
{
INF_IS_SCROLLBAR_ENABLED = currentScrollbarStatus;
}
}
TaskMenu._onClick = function()
{
var srcElement = JS.getSourceElement(arguments[0]);
var srcMenu = srcElement.reflectClass;
if(srcMenu != null)
{
srcMenu.click();
}
}
TaskMenu._onMouseBehavior = function()
{
var refMenu = JS.getSourceElement(arguments[0]).reflectClass;
var nodeTypeFix = (refMenu._isSpecialHeadNode())? "_Head" : "";
var behaviorFix = (arguments[0].type.toUpperCase() == "MOUSEOVER")? "_MouseOver" : "";
refMenu.hLabel.className = "MenuTitle" + behaviorFix + nodeTypeFix;
if( (refMenu.state & TaskMenuState.open) || (refMenu.state & TaskMenuState.opening) )
{
refMenu.hArrayCell.className = "MenuTitlebarRight_Open" + behaviorFix + nodeTypeFix;
}
else if( (refMenu.state & TaskMenuState.close) || (refMenu.state & TaskMenuState.closing) )
{
refMenu.hArrayCell.className = "MenuTitlebarRight_Close" + behaviorFix + nodeTypeFix;
}
}
TaskMenu._invalidateAll = function()
{
for(var i = 0; i < TaskMenu.collection.length; i++)
{
TaskMenu.collection[i]._fixMenuWidth();
}
}
TaskMenu._refreshAll = function()
{
if( CFG_IS_SCROLLBAR_ENABLED )
if(TaskMenu._isScrollbarChanged())
{
TaskMenu._invalidateAll();
}
}
TaskMenu.setStyle = function(strCssFile)
{
var HeadElement = document.getElementsByTagName("HEAD")[0];
var cssFileID = "__TaskMenuCssFile__";
while(document.getElementById("TaskMenuCssFile") != null)
{
try
{
HeadElement.removeChild(document.getElementById(cssFileID ));
}
catch(ex)
{}
}
with(HeadElement.appendChild(document.createElement("LINK")))
{
id = cssFileID; href = strCssFile; rel = "stylesheet"; type = "text/css";
}
}
TaskMenu.setAutoBehavior = function(value)
{
INF_IS_MENU_BEHAVIOR_AUTO = (value == false)? false : true;
}
TaskMenu.setHeadMenuSpecial = function(value)
{
CFG_IS_SPECIAL_HEAD_NODE = (value == true)? true : false;
}
TaskMenu.setScrollbarEnabled = function(value)
{
CFG_IS_SCROLLBAR_ENABLED = (value == false)? false : true;
try
{
if(CFG_IS_SCROLLBAR_ENABLED)
document.body.style.overflowY = "auto";
else
document.body.style.overflowY = "hidden";
}
catch(ex)
{
alert(ex.description);
}
}
function JS()
{}
JS.getSourceElement = function(evt)
{
return (evt.target == null)? evt.srcElement : evt.target;
}
JS.addListener = function(obj,eventName,callbackFunction,flag)
{
if(obj.attachEvent)
obj.attachEvent("on" + eventName,callbackFunction);
else if(obj.addEventListener)
obj.addEventListener(eventName,callbackFunction,flag);
else
eval("obj.on" + eventName + "=" + callbackFunction);
}
JS.removeListener = function(obj,eventName,callbackFunction,flag)
{
if(obj.detachEvent)
obj.detachEvent("on" + eventName,callbackFunction);
else if (obj.removeEventListener)
obj.removeEventListener(eventName,callbackFunction,flag);
else
eval("obj.on" + eventName + "= new Function()");
}
JS.addListener(window,"resize",new Function("setTimeout(\"TaskMenu._refreshAll()\",30);"),false);
JS.addListener(window,"error",new Function("return true"),false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -