90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
var als7_cmenu_body;
|
|
var als7_cmenu_shadow;
|
|
var als8_cmenu_closer;
|
|
function initASContextMenu(menu){
|
|
menu.find(">div").each(function(e){
|
|
var item=$(this);
|
|
if(item.hasClass("menu-sep")){
|
|
item.html(" ");
|
|
}
|
|
else{
|
|
var text=item.addClass("menu-item").html();
|
|
item.empty().append($("<div class=\"menu-text\"></div>").html(text));
|
|
var iconCls=item.attr("iconCls")||item.attr("icon");
|
|
if(iconCls){
|
|
$("<div class=\"menu-icon\"></div>").addClass(iconCls).appendTo(item);
|
|
}
|
|
item.mouseover(function(e){item.addClass("menu-active");});
|
|
item.mouseout(function(e){item.removeClass("menu-active");});
|
|
item.click(function(e){hideASContextMenu(e,true);});
|
|
}
|
|
});
|
|
};
|
|
function hideASContextMenu(e,forceClose){
|
|
if(als7_cmenu_body)als7_cmenu_body.hide();
|
|
if(als7_cmenu_shadow)als7_cmenu_shadow.hide();
|
|
}
|
|
function showASContextMenu(menu,e,x,y){
|
|
var iLeft = e.clientX?e.clientX:e.x;
|
|
var iTop = e.clientY?e.clientY:e.y;
|
|
iTop = iTop + document.body.scrollTop;
|
|
if(x && !isNaN(x)) iLeft += x;
|
|
if(y && !isNaN(y)) iTop += y;
|
|
//修正右键菜单在最右端、最下端时的位置
|
|
if(document.body.offsetWidth - iLeft < menu.width()) iLeft = iLeft - menu.width();
|
|
if(document.body.offsetHeight - iTop < menu.height()) iTop = iTop - menu.height();
|
|
menu.css({left:iLeft,top:iTop});
|
|
//创建阴影效果
|
|
if(als7_cmenu_shadow==undefined){
|
|
als7_cmenu_shadow = $("<div class=\"menu-shadow\"></div>").insertAfter(menu);
|
|
}
|
|
als7_cmenu_shadow.css({display:"block",zIndex:99,left:iLeft,top:iTop,width:menu.outerWidth(),height:menu.outerHeight()});
|
|
menu.css("z-index",100);
|
|
menu.show();
|
|
}
|
|
function isClickOnMe(e){
|
|
if(e.srcElement){
|
|
if (e.srcElement.parentNode==undefined)
|
|
return true;
|
|
if(e.srcElement.parentNode.id==als7_cmenu_body.attr('id') || e.srcElement.parentNode.parentNode.id==als7_cmenu_body.attr('id'))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
else if(e.target){
|
|
if (e.target.parentNode==undefined)
|
|
return true;
|
|
if(e.target.parentNode.id==als7_cmenu_body.attr('id') || e.target.parentNode.parentNode.id==als7_cmenu_body.attr('id'))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function bindASContextMenu(objectid,e,x,y){
|
|
e = (e==undefined?event:e);
|
|
if(!als7_cmenu_body){
|
|
als7_cmenu_body = $('#' + objectid);
|
|
initASContextMenu(als7_cmenu_body);
|
|
}
|
|
if(!isClickOnMe(e))
|
|
showASContextMenu(als7_cmenu_body,e,x,y);
|
|
}
|
|
if(document.addEventListener){
|
|
document.addEventListener("click",documentOnmousedown,false);
|
|
}
|
|
else{
|
|
document.attachEvent("onclick",documentOnmousedown,false);
|
|
}
|
|
function documentOnmousedown(e){
|
|
try{
|
|
if(e.srcElement &&( e.srcElement.type=='radio' || e.srcElement.type=='checkbox' || e.srcElement.type=='select-one' || e.srcElement.type=='select-multiple'))
|
|
CHANGED = true;
|
|
else if(e.target &&( e.target.type=='radio' || e.srcElement.target=='checkbox' || e.srcElement.type=='select-one' || e.srcElement.type=='select-multiple'))
|
|
CHANGED = true;
|
|
}
|
|
catch(e){}
|
|
hideASContextMenu(e,true);
|
|
} |