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 相关文章推荐
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
jquery sortable的拖动方法示例详解
Jan 16 Javascript
js取模(求余数)隔行变色
May 15 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
Aug 02 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
详解vuex commit保存数据技巧
Dec 25 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
Vue组件生命周期运行原理解析
Nov 25 Vue.js
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获取mysql版本的几种方法小结
2008/03/25 PHP
mailto的使用技巧分享
2012/12/21 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python自动化之Ansible的安装教程
2019/06/13 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
销售人员个人求职信
2013/09/26 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
大学生毕业求职信
2014/06/12 职场文书
个人简历自荐信
2014/06/26 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
求职简历自我评价范文
2015/03/10 职场文书
孟佩杰观后感
2015/06/17 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
初中英语教学反思范文
2016/02/15 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
mysql如何查询连续记录
2022/05/11 MySQL