Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
Эффективная реализация требований и избежание дублирования колес. Сегодня я поделюсь с вами тем, как реализовать контекстное меню в кратчайшие сроки. Способ тоже очень простой, плагин можно сделать, нечего сказать, на рендерах:
визуализация
Установить
npm install vue-contextmenujs
или
yarn add vue-contextmenujs
CDN
<script src="https://unpkg.com/vue-contextmenujs/dist/contextmenu.umd.js">
использовать
import Contextmenu from "vue-contextmenujs"
Vue.use(Contextmenu);
Внедрение CDN не требуетсяVue.use(Contextmenu)
Код
кelement-uiВозьмите значок в качестве примера для реализации контекстного меню, и значок будет отображаться как<i class="icon"></i>, код показан ниже:
<template>
<div style="width:100vw;height:100vh" @contextmenu.prevent="onContextmenu"></div>
</template>
<script>
import Vue from 'vue'
import Contextmenu from "vue-contextmenujs"
Vue.use(Contextmenu);
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, // 鼠标事件信息
customClass: "custom-class", // 自定义菜单 class
zIndex: 3, // 菜单样式 z-index
minWidth: 230 // 主菜单最小宽度
});
return false;
}
}
};
</script>
опции менюitemsВ массиве вы можете настроить его в соответствии с вашими потребностями. В это время нажмите правую кнопку, и волшебным образом появится всплывающее окно меню.Не правда ли, это очень просто!
нестандартный стиль
Откройте консоль и посмотрите на элементы, чтобы увидеть название каждого класса меню. Самый внешний класс - это тот, что вышеcustomClassЗначение параметра настройки стиля можно настроить в соответствии с потребностями.
<style>
.custom-class .menu_item__available:hover,
.custom-class .menu_item_expand {
background: #ffecf2 !important;
color: #ff4050 !important;
}
</style>
Суммировать
Вышеупомянутый основной метод использования, экономит ли он много времени, чем упаковывать его самостоятельно. Учтите, что меню будет автоматически уничтожено при нажатии левой кнопки или прокрутке колесика, а также его можно вызватьthis.$contextmenu.destroy()Самоуничтожение в других сценах. Ниже приведена конфигурация параметров плагина:
Свойства меню MenuOptions
| Атрибуты | описывать | Типы | необязательное значение | По умолчанию |
|---|---|---|---|---|
| items | информация о структуре меню | MenuItemOptions[] |
— | — |
| event | информация о событии мыши | Event |
— | — |
| x | В меню отображается координата X, существуетeventтогда недействительный |
number |
— | 0 |
| y | В меню отображается координата Y, существуетeventтогда недействительный |
number |
— | 0 |
| zIndex | стиль менюz-index
|
number |
— | 2 |
| customClass | пользовательский класс меню | string |
— | — |
| minWidth | Минимальная ширина главного меню | number |
— | 150 |
Свойства опции MenuItemOptions
| Атрибуты | описывать | Типы | необязательное значение | По умолчанию |
|---|---|---|---|---|
| label | название пункта меню | string |
— | — |
| icon | иконка пункта меню, сгенерированная<i class="icon"></i>элемент |
string |
— | — |
| disabled | отключить ли пункт меню | boolean |
— | false |
| divided | Показывать ли разделительную линию | boolean |
— | false |
| customClass | пользовательский класс подменю | string |
— | — |
| minWidth | минимальная ширина подменю | number |
— | 150 |
| onClick | событие щелчка пункта меню | Function() |
— | — |
| children | Информация о структуре подменю | MenuItemOptions[] |
— | — |
Добро пожаловать, чтобы оставить сообщение в области комментариев, официальный представитель Nuggets будет вПроект «Звезда раскопок»После события 100 штук Наггетсов будут разыграны в области комментариев. Если статья была вам полезна, не забудьте поставить лайк~
Я слышал, что люди, которым понравился персонаж этого года, взорвались, а бонус в конце года удвоился 🤩