12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /**
- * @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 = $('<div id="contextmenu"></div>').appendTo('body').hide();
- }
- if (!shadow) {
- shadow = $('<div id="contextmenuShadow"></div>').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);
|