/** * @author zhanghuihua@msn.com */ (function($){ var menu, shadow, hash; $.fn.extend({ contextMenu: function(id, options){ var op = $.extend({ shadow : true, bindings:{}, ctrSub:null }, options ); if (!menu) { menu = $('
').appendTo('body').hide(); } if (!shadow) { shadow = $('').appendTo('body').hide(); } hash = hash || []; hash.push({ id : id, shadow: op.shadow, bindings: op.bindings || {}, ctrSub: op.ctrSub }); var index = hash.length - 1; $(this).bind('contextmenu', function(e) { display(index, this, e, op); return false; }); return this; } }); function display(index, trigger, e, options) { var cur = hash[index]; var content = $(DWZ.frag[cur.id]); content.find('li').hoverClass(); // Send the content to the menu menu.html(content); $.each(cur.bindings, function(id, func) { $("[rel='"+id+"']", menu).bind('click', function(e) { hide(); func($(trigger), $("#"+cur.id)); }); }); var posX = e.pageX; var posY = e.pageY; if ($(window).width() < posX + menu.width()) posX -= menu.width(); if ($(window).height() < posY + menu.height()) posY -= menu.height(); menu.css({'left':posX,'top':posY}).show(); if (cur.shadow) shadow.css({width:menu.width(),height:menu.height(),left:posX+3,top:posY+3}).show(); $(document).one('click', hide); if ($.isFunction(cur.ctrSub)) {cur.ctrSub($(trigger), $("#"+cur.id));} } function hide() { menu.hide(); shadow.hide(); } })(jQuery);