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 相关文章推荐
js中cookie的使用详细分析
May 28 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
Sep 25 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
Apr 02 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
Dec 24 Javascript
jQuery实现自定义下拉列表
Jan 05 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
axios学习教程全攻略
Mar 26 Javascript
基于Vue2x的图片预览插件的示例代码
May 14 Javascript
layui lay-verify form表单自定义验证规则详解
Sep 18 Javascript
js实现数字滚动特效
Dec 16 Javascript
javascript将扁平的数据转为树形结构的高效率算法
Feb 27 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
超级简单的发送邮件程序
2006/10/09 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
基于python指定包的安装路径方法
2018/10/27 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python3标准库总结
2019/02/19 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
在职研究生自我鉴定
2013/10/16 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
销售队伍口号
2014/06/11 职场文书
起诉书格式范文
2015/05/20 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
python中print格式化输出的问题
2021/04/16 Python
k8s部署redis cluster集群的实现
2021/06/24 Redis
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL