# vue3-menus
**Repository Path**: CodeBuildingWorld/vue3-menus
## Basic Information
- **Project Name**: vue3-menus
- **Description**: Vue3.0 自定义右键菜单
- **Primary Language**: NodeJS
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 10
- **Created**: 2023-06-12
- **Last Updated**: 2023-06-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue3-menus
Vue3.0 自定义右键菜单
Vue3.0 原生实现完全自定义右键菜单组件, 零依赖,可根据可视区域自动调节显示位置,可支持插槽完全重写每一项菜单

## 在线演示
- [完整菜单功能演示](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
组件方式打开菜单
{{activeIndex}}
插槽:{{ item.label }}
```
## Vite下使用
### 使用方式1
```js
import { createApp } from 'vue';
import App from './App.vue';
import Vue3Menus from 'https://esm.sh/vue3-menus@1.0.3'; // 也可以将1.0.3换成其他版本号
const app = createApp(App);
app.mount('#app');
```
### 使用方式2
> 在vite配置文件vite.config中进行别名替换
```js
import { createApp } from 'vue';
import App from './App.vue';
import Vue3Menus from 'vue3-menus';
const app = createApp(App);
app.mount('#app');
```
```js
export default {
resolve: {
alias: {
// 其他配置
'vue3-menus': 'https://esm.sh/vue3-menus@1.0.3'// 也可以将1.0.3换成其他版本号
}
}
}
```
## 参数说明
### 单个菜单项参数`MenusItemOptions`
| 属性 | 描述 | 类型 | 是否必填 | 默认值 |
| :------: | :------------------------------------------------------------------------------------: | :------------------: | :------: | :---------: |
| label | 菜单项名称 | `string` | `true` | — |
| style | 每一项菜单的自定义样式 | `object` | `false` | `{}` |
| icon | `string`: 传入图标html代码、`object`: 传入组件或者`{node: 组件, option: 组件配置参数}` | `string` \| `object` | `false` | `undefined` |
| disabled | 是否禁用菜单项 | `boolean` | `false` | `undefined` |
| divided | 是否显示分割线 | `boolean` | `false` | `undefined` |
| tip | 没项菜单后面的小提示 | `string` | `false` | `''` |
| click | 菜单项点击事件,返回`null`或`false`不关闭菜单 | `Function()` | `false` | `undefined` |
| children | 子菜单列表信息 | `MenusItemOptions[]` | `false` | `undefined` |
### 公共参数`MenuOptions`
| 属性 | 描述 | 类型 | 是否必填 | 默认值 |
| :------------: | :--------------------------------------: | :----------------------: | :------------------: | :----: |
| menus | 菜单列表信息 | `MenusItemOptions[]` | `true` | [] |
| menusStyle | 菜单容器的样式 | `object` | `false` | {} |
| menusItemClass | 菜单每一项的`class`名 | `string` | `false` | `null` |
| event | 鼠标事件信息(指令使用时可以不传) | `Event` | 与`position`必填一项 | {} |
| position | 手动传入菜单显示位置(指令使用时可以不传) | `{x: number, y: number}` | 与`event`必填一项 | {} |
| minWidth | 菜单容器最小宽度 | `number` \| `string` | `false` | `none` |
| maxWidth | 菜单容器最打宽度 | `number` \| `string` | `false` | `none` |
| zIndex | 菜单层级 | `number` \| `string` | `false` | `3` |
### 组件`Vue3Menus`参数
| 属性 | 描述 | 类型 | 是否必填 | 默认值 | 插槽传入值 |
| :-----: | :--------------: | :-------: | :------: | :-----: | :-----------------------------------------------: |
| open | 控制菜单组件显示 | `boolean` | `true` | `false` | `false` |
| default | 默认插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中项, `item`: 当前菜单属性值 |
| icon | 图标插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中项, `item`: 当前菜单属性值 |
| label | 菜单标题插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中项, `item`: 当前菜单属性值 |
| suffix | 菜单后缀插槽 | `Slot` | `false` | - | `activeIndex`: 当前选中项, `item`: 当前菜单属性值 |
### 指令使用配置
| 指令使用方式 | 描述 | 参数类型 | 参数是否必填 | 默认值 |
| :-----------: | :------------------------: | :-----------: | :----------: | :----: |
| v-menus | 绑定元素右击打开菜单 | `MenuOptions` | `true` | - |
| v-menus:all | 绑定元素左右击均可打开菜单 | `MenuOptions` | `true` | - |
| v-menus:left | 绑定元素左击打开 | `MenuOptions` | `true` | - |
| v-menus:right | 绑定元素右击打开 | `MenuOptions` | `true` | - |