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 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
May 17 Javascript
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
Apr 02 Javascript
JS动态添加Table的TR,TD实现方法
Jan 28 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
简单实现js浮动框
Dec 13 Javascript
Javascript中的 “&amp;” 和 “|” 详解
Feb 02 Javascript
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
微信小程序以ssm做后台开发的实现示例
Apr 08 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
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python实现数据库跨服务器迁移
2018/04/12 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Flask-Mail用法实例分析
2018/07/21 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
python操作kafka实践的示例代码
2019/06/19 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
农民入党思想汇报
2014/01/03 职场文书
触电现场处置方案
2014/05/14 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
股东授权委托书范本
2014/09/13 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
导游词幽默开场白
2019/06/26 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书