jQuery无级右键菜单

 是优化和修改以前的一个contextMenu插件,源码如下,估计都没有多少人喜欢看代码,贴出来先看,效果页面随后做出来。
截图:

(function($) {
    var menu, shadow, trigger, content, hash, currentTarget;
    var defaults = {
        menuStyle : {
            listStyle : 'none',
            padding : '1px',
            margin : '0px',
            backgroundColor : '#fff',
            border : '1px solid #999',
            width : '100px',
            float:'left'
        },
        itemStyle : {
            margin : '0px',
            color : '#000',
            display : 'block',
            cursor : 'default',
            padding : '3px',
            border : '1px solid #fff',
            backgroundColor : 'transparent'
        },
        itemHoverStyle : {
            border : '1px solid #0a246a',
            backgroundColor : '#b6bdd2'
        },
        itemFalseStyle :{
            color : '#ccc'
        },
        eventPosX : 'pageX',
        eventPosY : 'pageY',
        shadow : true,
        onContextMenu : null,
        onShowMenu : null
    };
    $.fn.contextMenu = function(o,id, options,noevent) {
        if (!menu) {
            menu = $('').hide().css({
                position : 'absolute',
                zIndex : '500'
            }).appendTo('body').bind('click', function(e) {
                e.stopPropagation();
            });
        }
        if (!shadow) {
            shadow = $('').css({
                backgroundColor : '#000',
                position : 'absolute',
                opacity : 0.2,
                zIndex : 499
            }).appendTo('body').hide()
        }
        hash = hash || [];
        hash.push({
            id : id,
            menuStyle : $.extend({}, defaults.menuStyle, options.menuStyle
            || {}),
            itemStyle : $.extend({}, defaults.itemStyle, options.itemStyle
            || {}),
            itemHoverStyle : $.extend({}, defaults.itemHoverStyle,
            options.itemHoverStyle || {}),
            itemFalseStyle : $.extend({}, defaults.itemFalseStyle,
            options.itemFalseStyle || {}),
            bindings : options.bindings || {},
            shadow : options.shadow || options.shadow === false
            ? options.shadow
            : defaults.shadow,
            onContextMenu : options.onContextMenu || defaults.onContextMenu,
            onShowMenu : options.onShowMenu || defaults.onShowMenu,
            eventPosX : options.eventPosX || defaults.eventPosX,
            eventPosY : options.eventPosY || defaults.eventPosY
        });

        var index = hash.length - 1;
        $(this).bind('contextmenu', function(e) {
            $(o).click();
            var bShowContext = (!!hash[index].onContextMenu) ? hash[index]
            .onContextMenu(e) : true;
            if (bShowContext)
            display($(o),index, this, e, options);
            return false
        });
        return this
    };
    function display(o,index, trigger, e, options) {
        menu.html('');
        var cur = hash[index];
        if (!!cur.onShowMenu)
        menu = cur.onShowMenu(e, menu);
        menus(o,cur,cur.bindings,trigger);
        menu.css({
        'left' : e[cur.eventPosX],
        'top' : e[cur.eventPosY]
        }).show();
        if (cur.shadow)
        shadow.css({
            width : menu.width(),
            height : menu.height(),
            left : e.pageX + 2,
            top : e.pageY + 2
        }).show();
        $(document).one('click', hide)
    }
    function menus(o,cur,bindings,trigger,po){
        content = $('
  • ').css(cur.menuStyle);
            if(po){
                content.css({'margin-top':$(po).offset().top-$('#jqContextMenu').offset().top});
            }
            $.each(bindings, function(id, v) {
                var is_my=($(o).attr('ismy')=='1'||v.ismy)?1:0;
                $('
  • ').html(v.val).css(cur.itemStyle).css(!is_my&&cur.itemFalseStyle).hover(
                function(){
                    is_my&&$(this).css(cur.itemHoverStyle);
                    $(this).parent().nextAll().remove();
                    (is_my&&v.nt)&&menus(o,cur,v.nt,trigger,this);
                },function(){
                    is_my&&$(this).css(cur.itemStyle);
                }).click(function(){
                    hide();
                    (!v.nt&&is_my)&&v.cb(trigger, currentTarget);
                }).appendTo(content).find('img').css({
                    verticalAlign : 'middle',
                    paddingRight : '2px'
                });
            });
            menu.append(content);
        }
        function hide() {
            menu.hide();
            shadow.hide()
        }
        $.contextMenu = {
            defaults : function(userDefaults) {
                $.each(userDefaults, function(i, val) {
                    if (typeof val == 'object' && defaults[i]) {
                        $.extend(defaults[i], val)
                    } else
                    defaults[i] = val
                })
            }
        }
    })(jQuery);
使用样例:
<div id="contextTest" style="margin:10px;padding:1px;width:200px;border:1px #ccc solid">contextMenu</div>
jQuery代码:
<script>
    $('#contextTest').contextMenu(this,'contextMenuTest',{
        bindings:{
            'test1':{
                        val:'test1',
                        ismy:1,
                        cb:function(t){
                            alert('test1');
                        }
            },
            'test2':{
                        val:'test2',
                        ismy:1,
                        nt:{
                            'test3':{
                          val:'test3',
                                ismy:1,
                                cb:function(t){
                                    alert('test3');
                                }
                          },
                            'test4':{
                          val:'test4',
                                ismy:1,
                                cb:function(t){
                                    alert('test4');
                                }
                          }
                        }
                   
            },
        }
  });
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ECharts中,要实现右键菜单可以使用以下方法: 首先,在HTML中添加一个用于显示右键菜单的div元素,设置其样式为display:none,表示一开始是隐藏的。 然后,通过jQuery绑定鼠标右键事件,在事件回调函数中阻止浏览器的默认右键菜单弹出。 接着,在事件回调函数中设置右键菜单的位置,根据鼠标点击的位置进行定位,并将其显示出来。 同时,还需要添加一个点击画布的事件,当点击画布时,隐藏右键菜单。 最后,可以在右键菜单的div元素中添加相应的菜单项,以便用户进行操作。 以上是实现ECharts右键菜单的基本思路,具体的代码可以参考中的示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [echarts组织结构图及自定义右键菜单](https://download.csdn.net/download/xieedeni/10175200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [echarts树图,添加鼠标右键功能,弹出操作框](https://blog.csdn.net/weixin_49913387/article/details/111048194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值