(function(menu) { jQuery.fn.contextmenu = function(options) { var defaults = { offsetX : 2, //鼠标在X轴偏移量 offsetY : 2, //鼠标在Y轴偏移量 items : [], //菜单项 action : $.noop() //自由菜单项回到事件 }; var opt = menu.extend(true, defaults, options); function create(e) { var m = menu('').appendTo(document.body); menu.each(opt.items, function(i, item) { if (item) { if(item.type == "split"){ menu("
").appendTo(m); return; } var row = menu('
  • ').appendTo(m); item.icon ? menu('').insertBefore(row.find('span')) : ''; item.text ? row.find('span').text(item.text) : ''; if (item.action) { row.find('a').click(function() { item.action(e.target); }); } } }); return m; } this.live('contextmenu', function(e) { var m = create(e).show("fast"); var left = e.pageX + opt.offsetX, top = e.pageY + opt.offsetY, p = { wh : menu(window).height(), ww : menu(window).width(), mh : m.height(), mw : m.width() } top = (top + p.mh) >= p.wh ? (top -= p.mh) : top; //当菜单超出窗口边界时处理 left = (left + p.mw) >= p.ww ? (left -= p.mw) : left; m.css({ zIndex : 10000, left : left, top : top }); $(document.body).live('contextmenu click', function() { m.hide("fast",function(){ m.remove(); }); }); return false; }); return this; } })(jQuery); //javascript/5671