基于vue项目右键面板的封装

  1. 先安装插件

npm install vue-contextmenujs

  1. 在main.js中挂载
import Contextmenujs from 'vue-contextmenujs'
Vue.use(Contextmenujs)
  1. 在项目中复制该类代码
/* 
  第一个参数可传递元素或者事件,不接收VueComponent形式。原生组件传递 el => $ref.xxx即可
  第二个参数传递配置项
  第三个参数接收Vue实例
*/
class ContextMenu{
  constructor(event,options,vm){
    if (event instanceof PointerEvent) {
      this.event = event
    }else{
      this.el = event
    }
    this.vm = vm
    this.options = Object.assign({
      customClass: "",
      event,
      zIndex: 999,
      minWidth: 200,
      items:[]
    },options)
  }

  init(){
    if (this.el) {
      this._bindContextMenuEl()
      return
    }
    this._setContextMenu()
  }

  // 当传递的是元素
  _bindContextMenuEl(){
    this.el.addEventListener('contextmenu',(event)=>{
      this.event = event
      this._setContextMenu()
    })
  }

  // 设置右键弹窗
  _setContextMenu(){
    this.vm.$contextmenu.destroy();
    this.options.event = this.event
    this.vm.$contextmenu(this.options);
    // 阻止页面本有的右键弹窗
    this.event.preventDefault()
  }
}
export default ContextMenu
  1. 在页面中使用
<div ref="test"></div>
import ContextMenu from './ContextMenu'
export default{
	mounted(){
		const items=[
			{
				label:'下载',
				onclick:()=>{}
			},
			{
				label:'删除',
		        icon: "el-icon-discount",
				onclick:()=>{}
			},
		]
		new ContextMenu(this.$refs.test,{items},this).init()
	}
}

注意:如果是类似el-table此类组件,传递this.$refs.table是无效的,可以传递this.$refs.table.$el。不过一般el-table封装了很多事件,所以在new Context是在第一个参数传递event进去。

上述是基于vue项目的封装,ContextMenu还可以配置更多的项,这里我是根据自己的业务需求简单配置即可,感兴趣的可以去vue-contextmenujs查看更多配置项哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值