/*
* Author:antianlu
* Date:2012-04-21
* Plugin name:jQuery.Contextmenu
* Address:http://www.oschina.net/code/snippet_153403_9880
* Version:0.2
* Email:atlatl333@126.com
*/
(function(cm){
jQuery.fn.WinContextMenu=function(options){
var defaults={
offsetX:2,//鼠标在X轴偏移量
offsetY:2,//鼠标在Y轴偏移量
speed:300,//特效速度
flash:!1,//特效是否开启,默认不开启
flashMode:'',//特效模式,与flash为真时使用
cancel:!1,//排除不出现右键菜单区域
items:[],//菜单项
action:$.noop()//自由菜单项回到事件
};
var opt=cm.extend(true,defaults,options);
function create(e){
var m=cm('
').appendTo(document.body);
cm.each(opt.items,function(i,itm){
if(itm){
var row=cm('').appendTo(m);
itm.icon?cm('').insertBefore(row.find('span')):'';
itm.text?row.find('span').text(itm.text):'';
if(itm.action) {
row.find('a').click(function(){this.className!='cmDisable'?itm.action(e):null;});}
}
});
if(cm('#WincontextMenu').html()!=null){
cm(cm('#WincontextMenu').html().replace(/#/g,'javascript:void(0)')).appendTo(m);}
return m;
}
if(opt.cancel){//排除不出现右键菜单区域
cm(opt.cancel).live('contextmenu',function(e){return false});}
this.live('contextmenu',function(e){
var m=create(e).show();
var l = e.pageX + opt.offsetX,
t = e.pageY+opt.offsetY,
p={
wh:cm(window).height(),
ww:cm(window).width(),
mh:m.height(),
mw:m.width()
}
t=(t+p.mh)>=p.wh?(t-=p.mh):t;//当菜单超出窗口边界时处理
l=(l+p.mw)>=p.ww?(l-=p.mw):l;
m.css({zIndex:1000001, left:l, top:t}).live('contextmenu', function() { return false; });
m.find('a').click(function(e){//呼叫新从页面增加的菜单项
var b=$(this).attr('ref');
if(b!='sitem'){this.className!='cmDisable'?opt.action(this):null;}
e.preventDefault();
});
cm(document.body).live('contextmenu click', function() {//防止有动态加载的标签失效问题
m.remove();
});
return false;
});
return this;
}
})(jQuery);