# vue3-menus Vue3.0 自定义右键菜单,支持 Vite2.0,[官网](https://doc.wssio.com/opensource/vue3-menus/) Vue3.0 原生实现完全自定义右键菜单组件, 零依赖,可根据可视区域自动调节显示位置,可支持插槽完全重写每一项菜单 ![演示](./example/vue3-menus.png) ## 在线演示 - [完整菜单功能演示](https://codepen.io/xfy520/pen/yLXNqzy) - [复制粘贴演示](https://codepen.io/xfy520/pen/xxrGJdg) ## 快速安装 ### npm 安装 ```shell npm install vue3-menus ``` 或 ```shell yarn add vue3-menus ``` ### CDN ```html ``` ```css .div { display: inline-block; background-color: aqua; margin: 0 20px; line-height: 200px; padding: 0 20px; height: 200px; } ``` ### 指令方式使用 ```html ``` ### 方法方式使用 ```html ``` ### 组件方式使用 ```html ``` ## 参数说明 ### 单个菜单项参数`MenusItemOptions` | 属性 | 描述 | 类型 | 是否必填 | 默认值 | | :------: | :----------------------------------------------------------: | :--------------------: | :------: | :---------: | | label | 菜单项名称 | `string` | `true` | — | | style | 每一项菜单的自定义样式 | `object` | `false` | `{}` | | icon | 图标参数,内部支持html字符串图标,传入组件时需要实现icon插槽 | `string` \| `其他类型` | `false` | `undefined` | | disabled | 是否禁用菜单项 | `boolean` | `false` | `undefined` | | divided | 是否显示分割线 | `boolean` | `false` | `undefined` | | tip | 没项菜单后面的小提示 | `string` | `false` | `''` | | hidden | 是否隐藏该项 | `boolean` | `false` | `undefined` | | children | 子菜单列表信息 | `MenusItemOptions[]` | `false` | `undefined` | | enter | 菜单项移入事件,返回`null`或`false`不展开子菜单 | `Function()` | `false` | `undefined` | | click | 菜单项点击事件,返回`null`或`false`不关闭菜单 | `Function()` | `false` | `undefined` | ### 指令与方法使用参数 | 属性 | 描述 | 类型 | 是否必填 | 默认值 | | :-------: | :---------------------------------------------: | :-------------------: | :------: | :---------: | | menus | 菜单列表信息 | `MenusItemOptions[]` | `true` | [] | | menusClass | 菜单外层 `div` 的 `class` 名 | `string` | `false` | `null` | | itemClass | 菜单每一项的`class`名 | `string` | `false` | `null` | | minWidth | 菜单容器最小宽度 | `number` \| `string` | `false` | `none` | | maxWidth | 菜单容器最打宽度 | `number` \| `string` | `false` | `none` | | zIndex | 菜单层级 | `number` \| `string` | `false` | `3` | | direction | 菜单打开方向 | `left` \| `right` | `false` | `right` | ### 组件使用参数 | 属性 | 描述 | 类型 | 是否必填 | 默认值 | 插槽传入值 | | :-------: | :---------------------------------------------: | :-------------------: | :------------------: | :---------: | :-----------------------------------------------: | | menus | 菜单列表信息 | `MenusItemOptions[]` | `true` | [] | | | event | 鼠标事件信息(指令使用时不传) | `Event` | 与`position`必填一项 | {} | | | menusClass | 菜单外层 `div` 的 `class` 名 | `string` | `false` | `null` | | | itemClass | 菜单每一项的`class`名 | `string` | `false` | `null` | | | minWidth | 菜单容器最小宽度 | `number` \| `string` | `false` | `none` | | | maxWidth | 菜单容器最打宽度 | `number` \| `string` | `false` | `none` | | | zIndex | 菜单层级 | `number` \| `string` | `false` | `3` | | | direction | 菜单打开方向 | `left` \| `right` | `false` | `right` | | | open | 控制菜单组件显示 | `boolean` | `true` | `false` | | | args | 附加参数 | `unknown` | `false` | `undefined` | | | default | 默认插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中索引, `menu`: 当前菜单项 `MenusItemOptions`, `index`: 当前菜单索引 | | icon | 图标插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中索引, `menu`: 当前菜单项 `MenusItemOptions`, `index`: 当前菜单索引 | | label | 菜单标题插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中索引, `menu`: 当前菜单项 `MenusItemOptions`, `index`: 当前菜单索引 | | suffix | 菜单后缀插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中索引, `menu`: 当前菜单项 `MenusItemOptions`, `index`: 当前菜单索引 | ### 指令使用配置 > 配置参数与方法使用相同 | 指令使用方式 | 描述 | 参数类型 | 参数是否必填 | 默认值 | | :-----------: | :------------------------: | :-----------: | :----------: | :----: | | v-menus | 绑定元素右击打开菜单 | `MenuOptions` | `true` | - | | v-menus:all | 绑定元素左右击均可打开菜单 | `MenuOptions` | `true` | - | | v-menus:left | 绑定元素左击打开 | `MenuOptions` | `true` | - | | v-menus:right | 绑定元素右击打开 | `MenuOptions` | `true` | - |