vue 自定义右键样式的实例代码


Posted in Javascript onNovember 06, 2019

最近用python写了个小说程序的api,想着用 vue 做个系统管理数据,脑子里出现的是这个画面:

vue 自定义右键样式的实例代码 

但是这种样式的管理后台已经做了太多了,已经审美疲劳,后面又想了一种类操作系统的UI界面:

vue 自定义右键样式的实例代码

主要是靠 双击右键 来操作,可操作多个模态框,跟操作 windows 类似,接下来在里面拆出一个功能块来写一篇文章,就是 自定义系统默认的右键

自定义右键操作有五个步骤: 阻止 默认右键。 获取当前右键点击时的 x / y 坐标,及 id 。 自定义右键菜单样式及内容,定位在指定的位置后显示。 返回对应点击目录的事件如: 查看删除编辑 。 在任何地方点击左键时 隐藏右键菜单 。 关键方法:

@contextmenu.prevent

这个是vue内置的,点击右键(阻止默认右键的默认行为)的一个回调方法,他返回了一大串东西这里我用到的是这两个(用于定位显示菜单的x,y位置)

vue 自定义右键样式的实例代码

x_indexy_index 是储存在 data 中的,用于定位模态框位置。

ctrlId 用于给接口处理的依据

showMenu 用于判断是否显示右键菜单

<!--template-->
<ul>
  <li class="role_list" 
	v-for="(item,index) in role" 
	:key="index"
	@contextmenu.prevent="(e)=>{
		x_index = e.layerX;
	    y_index = e.layerY;
		ctrlId = item.id;
		showMenu = true;
	}">
	  <img :src="item.head_portrait" alt="">
	  <p>{{item.name}}</p>
	</li>
</ul>

需要的参数(x,y,id)都具备了,因为右键操作很多地方都用到了,所以封装成了一个组件

right_menu.vue 组件代码

参数名 注释 x x坐标 y y坐标 showMenu 显示状态

参数名 注释
x x坐标
y y坐标
showMenu 显示状态

组件使用

<template>
  <div class="modal_data_box">
    <ul>
      <li class="role_list" 
        v-for="(item,index) in role" 
        :key="index"
        @contextmenu.prevent="(e)=>{
          x_index = e.layerX;
          y_index = e.layerY;
          ctrlId = item.id;
          showMenu = true;
        }">
        <img :src="item.head_portrait" alt="">
        <p>{{item.name}}</p>
      </li>
    </ul>
	<!--组件-->
	<right-menu :x="x_index"
	      :y="y_index" 
	      :showMenu="showMenu"
	      @close="closeMenu"
	      @open="openDetail"
	      @del="delAttr"
	      @update="updateArr">
	</right-menu>
  </div>
</template>
<script>
  // 导入组件
	import rightMenu from '../module/right_menu.vue';
	export default{
		name:"roleModal",
		components:{rightMenu},
		data(){
			return {
				x_index:0,
				y_index:0,
				ctrlId:'',
				showMenu:false,
				role:[],
			}
		},
		methods:{
		  //关闭回调 
		  closeMenu(state){
		    console.log('关闭')
		    this.showMenu = state;
		  },
		  //打开详情回调 			
		  openDetail(){
		    console.log('编辑')
		  },
		  //删除回调 			
		  delAttr(){
		    console.log('删除')
		  },
		  //编辑回调 			
		  updateArr(){
		    console.log('编辑')
		  },
		}
	}
</script>

修复漏洞

d[o_0]b同学发现了一个漏洞,就是当鼠标在屏幕右边点击时,菜单会被遮挡住,这边做了一些调整。

修复前:

vue 自定义右键样式的实例代码

//原来的代码
<ul>
  <li class="role_list" 
	v-for="(item,index) in role" 
	:key="index"
	@contextmenu.prevent="(e)=>{
		x_index = e.layerX;
	    y_index = e.layerY;
		ctrlId = item.id;
		showMenu = true;
	}">
	  <img :src="item.head_portrait" alt="">
	  <p>{{item.name}}</p>
	</li>
</ul>

修复后:

vue 自定义右键样式的实例代码

//修改后的代码,(由于要判断,所以单独写了个方法,把e跟item都传过去)
<ul>
	<li class="role_list" 
		v-for="(item,index) in role" 
		:key="index"
		@contextmenu.prevent="(e)=>{
			rightClick(e,item)
		}">
		<img :src="item.head_portrait" alt="">
		<p>{{item.name}}</p>
	</li>
</ul>

//对应的rightClick方法
rightClick(e,item){
	// 屏幕可见宽
	let clientWidth = document.body.clientWidth;
	// 菜单宽
	let menuWidth = 150;
	// 点击右键时会返回对应的clientX,用这个值与(clientWidth+菜单宽度)对比,如果大于的话,就把菜单左偏移一个菜单宽
	let clickClientX = e.clientX + menuWidth
	if(clickClientX > clientWidth){
		console.log("菜单超出视线范围")
		this.x_index = e.layerX - menuWidth;
	}else{
		this.x_index = e.layerX;
	}
	this.y_index = e.layerY;
	this.ctrlId = item.id;
	this.showMenu = true;
},

总结

以上所述是小编给大家介绍的vue 自定义右键样式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
js select常用操作控制代码
Mar 16 Javascript
关于jquery append() html时的小问题的解决方法
Dec 16 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 Javascript
js实现列表按字母排序
Aug 11 Javascript
Javascript基于OOP实实现探测器功能代码实例
Aug 26 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
Nov 06 #Javascript
vue 解决computed修改data数据的问题
Nov 06 #Javascript
微信小程序页面渲染实现方法
Nov 06 #Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 #Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 #Javascript
对vuex中getters计算过滤操作详解
Nov 06 #Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 #Javascript
You might like
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
jquery自定义组件实例详解
2020/12/31 jQuery
Python实现的金山快盘的签到程序
2013/01/17 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
tensorflow获取变量维度信息
2018/03/10 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
Python实现一个优先级队列的方法
2020/07/31 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
安踏广告词改编版
2014/03/21 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
网页美工求职信范文
2014/04/17 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
工程服务质量承诺书
2015/04/29 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
运动会报道稿大全
2015/07/23 职场文书
投资入股协议书
2016/03/22 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书