Vue 原生实现右键菜单组件, 零依赖
项目地址:https://github.com/GitHub-Laziji/menujs
npm 安装
npm install vue-contextmenujs
CDN
<script src="https://unpkg.com/vue-contextmenujs/dist/contextmenu.umd.js">
测试中使用的是element-ui图标
import Contextmenu from "vue-contextmenujs"
Vue.use(Contextmenu);
<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: "class-a",
zIndex: 3,
minWidth: 230
});
return false;
}
}
};
</script>
属性 | 描述 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
items | 菜单结构信息 | MenuItem[] | — | — |
event | 鼠标事件信息 | Event | — | — |
x | 菜单显示X坐标, 存在event则失效 | number | — | 0 |
y | 菜单显示Y坐标, 存在event则失效 | number | — | 0 |
zIndex | 菜单样式z-index | number | — | 2 |
customClass | 自定义菜单class | string | — | — |
minWidth | 主菜单最小宽度 | number | — | 150 |
属性 | 描述 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 菜单项名称 | string | — | — |
icon | 菜单项图标, 生成<i></i>元素 | string | — | — |
disabled | 是否禁用菜单项 | boolean | — | false |
divided | 是否显示分割线 | boolean | — | false |
customClass | 自定义子菜单class | string | — | — |
minWidth | 子菜单最小宽度 | number | — | 150 |
onClick | 菜单项点击事件 | Function() | — | — |
children | 子菜单结构信息 | MenuItem[] | — | — |
熟练使用导航栏,对于网站排版非常重要,使用CSS,js,jq等你可以转换成好看的导航栏而不是枯燥的HTML菜单。
1. 首先可以滑出菜单 2. 菜单滑动到一定距离完全滑出,未达到距离回滚 3. 菜单数量、样式随意定制 4. 菜单点击回调 5. 菜单展开时,点击 item 收回菜单,需求明了以后就可以写代码了。
做权限管理,一个核心思想就是后端做权限控制,前端做的所有工作都只是为了提高用户体验,我们不能依靠前端展示或者隐藏一个按钮来实现权限控制,这样肯定是不安全的。就像用户注册时需要输入邮箱地址,前端校验之后,后端还是要校验
数据结构中含有图片、名称、children的树形结构,需要展示出每一级的图片名称和图片,找了些树形图的插件,都没有展示大的图片的,一般都是小图标,就自己试着写一个包含图的简单的插件。
在pc 管理系统这种类型的产品,通常会涉及到账号权限的控制,不同的账号权限能浏览的功能模块是不同的,对应侧边栏菜单模块的显示也会不同。单点登录类系统,通常会多个项目公用一套登录系统,项目首页直接就是dashboard 或者 index页面
这是一个相当炫的功能,让网页看起来像桌面程序,如window的开始菜单。实现原理基本和纯CSS相册差不多,但要注意的事项比较多,让我们一步步来吧。
Vue+Element 实现管理页面菜单栏, 点击菜单时 router 改变 hash 访问不同子组件。但是改变 hash 时菜单栏展开状态和 highlight 并不会同步, 需要手动实现。
本文分别使用 SFC(模板方式)和 tsx 方式对 Element Plus el-menu 组件进行二次封装,实现配置化的菜单,有了配置化的菜单,后续便可以根据路由动态渲染菜单。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!