🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@lqzh/vue-context-menu

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lqzh/vue-context-menu

Vue context menu

latest
Source
npmnpm
Version
2.0.4
Version published
Weekly downloads
13
62.5%
Maintainers
1
Weekly downloads
 
Created
Source

致谢

原始代码来源于 https://github.com/GitHub-Laziji/menujs
源库年久失修, 故 fork 后重构

Vue ContextMenu

Vue 原生实现右键菜单组件, 零依赖

sample

快速安装

npm 安装

npm i @lqzh/vue-context-menu

CDN

<script src="./dist/vue-context-menu.umd.js">

使用

CDN 引入则不需要 Vue.use(Contextmenu)

测试中使用的是element-ui图标

import Contextmenu from '@lqzh/vue-context-menu';
Vue.use(Contextmenu);

// 在组件中调用显示菜单
// this.$contextmenu(options:MenuOptions);
// 鼠标点击或滚轮自动销毁, 也可手动销毁
// this.$contextmenu.destroy();

// 去除浏览器默认菜单
// event.preventDefault();
<template>
    <div id="app" style="width:100vw;height:100vh" @contextmenu.prevent="onContextmenu"></div>
</template>

<script>
    export default {
        methods: {
            onContextmenu(event) {
                this.$contextmenu({
                    items: [
                        {
                            label: '返回(B)',
                            onClick: () => {
                                this.message = '返回(B)';
                                console.log('返回(B)');
                            },
                        },
                        { label: '前进(F)', disabled: true },
                        { label: '重新加载(R)', divided: true, icon: 'el-icon-refresh' },
                        { label: '另存为(A)...' },
                        { label: '打印(P)...', icon: 'el-icon-printer' },
                        { label: '投射(C)...', divided: true },
                        {
                            label: '使用网页翻译(T)',
                            divided: true,
                            minWidth: 0,
                            children: [{ label: '翻译成简体中文' }, { label: '翻译成繁体中文' }],
                        },
                        {
                            label: '截取网页(R)',
                            minWidth: 0,
                            children: [
                                {
                                    label: '截取可视化区域',
                                    onClick: () => {
                                        this.message = '截取可视化区域';
                                        console.log('截取可视化区域');
                                    },
                                },
                                { label: '截取全屏' },
                            ],
                        },
                        { label: '查看网页源代码(V)', icon: 'el-icon-view' },
                        { label: '检查(N)' },
                    ],
                    event,
                    //x: event.clientX,
                    //y: event.clientY,
                    customClass: 'custom-class',
                    zIndex: 3,
                    minWidth: 230,
                });
                return false;
            },
        },
    };
</script>

自定义样式

/* custom */
.custom-class .menu_item__available:hover,
.custom-class .menu_item_expand {
    background: #ffecf2 !important;
    color: #ff4050 !important;
}

/* antd */
.antd-theme.menu {
    border-radius: 2px !important;
}
.antd-theme .menu_item {
    color: #000000d9 !important;
}
.antd-theme .menu_item__available:hover {
    background: #f5f5f5 !important;
}
.antd-theme .menu_item_expand {
    font-weight: 600 !important;
    background-color: #e6f7ff !important;
}

/* material */
.material-theme.menu {
    box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14),
        0px 3px 14px 2px rgba(0, 0, 0, 0.12) !important;
}
.material-theme .menu_item {
    color: #000000de !important;
}
.material-theme .menu_item__available:hover,
.material-theme .menu_item_expand {
    background: rgba(0, 0, 0, 0.04) !important;
}

参数说明

MenuOptions

属性描述类型可选值默认值
items菜单结构信息MenuItemOptions[]
event鼠标事件信息Event
x菜单显示 X 坐标, 存在event则失效number0
y菜单显示 Y 坐标, 存在event则失效number0
zIndex菜单样式z-indexnumber2
customClass自定义菜单 classstring
minWidth主菜单最小宽度number150

MenuItemOptions

属性描述类型可选值默认值
label菜单项名称string
icon菜单项图标, 生成<i class="icon"></i>元素string
disabled是否禁用菜单项booleanfalse
divided是否显示分割线booleanfalse
customClass自定义子菜单 classstring
minWidth子菜单最小宽度number150
onClick菜单项点击事件Function()
children子菜单结构信息MenuItemOptions[]

Keywords

Vue

FAQs

Package last updated on 11 Jul 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts