最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 自定義右鍵樣式的實(shí)例代碼

 更新時間:2019年11月06日 14:18:56   作者:水君子  
這篇文章主要介紹了vue 自定義右鍵樣式的實(shí)例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

最近用python寫了個小說程序的api,想著用 vue 做個系統(tǒng)管理數(shù)據(jù),腦子里出現(xiàn)的是這個畫面:

 

但是這種樣式的管理后臺已經(jīng)做了太多了,已經(jīng)審美疲勞,后面又想了一種類操作系統(tǒng)的UI界面:

主要是靠 雙擊右鍵 來操作,可操作多個模態(tài)框,跟操作 windows 類似,接下來在里面拆出一個功能塊來寫一篇文章,就是 自定義系統(tǒng)默認(rèn)的右鍵 。

自定義右鍵操作有五個步驟: 阻止 默認(rèn)右鍵。 獲取當(dāng)前右鍵點(diǎn)擊時的 x / y 坐標(biāo),及 id 。 自定義右鍵菜單樣式及內(nèi)容,定位在指定的位置后顯示。 返回對應(yīng)點(diǎn)擊目錄的事件如: 查看 、 刪除 、 編輯 。 在任何地方點(diǎn)擊左鍵時 隱藏右鍵菜單 。 關(guān)鍵方法:

@contextmenu.prevent

這個是vue內(nèi)置的,點(diǎn)擊右鍵(阻止默認(rèn)右鍵的默認(rèn)行為)的一個回調(diào)方法,他返回了一大串東西這里我用到的是這兩個(用于定位顯示菜單的x,y位置)

x_indexy_index 是儲存在 data 中的,用于定位模態(tài)框位置。

ctrlId 用于給接口處理的依據(jù)

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>

需要的參數(shù)(x,y,id)都具備了,因?yàn)橛益I操作很多地方都用到了,所以封裝成了一個組件

right_menu.vue 組件代碼 參數(shù)名 注釋 x x坐標(biāo) y y坐標(biāo) showMenu 顯示狀態(tài)

參數(shù)名 注釋
x x坐標(biāo)
y y坐標(biāo)
showMenu 顯示狀態(tài)

組件使用

<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>
  // 導(dǎo)入組件
	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:{
		  //關(guān)閉回調(diào) 
		  closeMenu(state){
		    console.log('關(guān)閉')
		    this.showMenu = state;
		  },
		  //打開詳情回調(diào) 			
		  openDetail(){
		    console.log('編輯')
		  },
		  //刪除回調(diào) 			
		  delAttr(){
		    console.log('刪除')
		  },
		  //編輯回調(diào) 			
		  updateArr(){
		    console.log('編輯')
		  },
		}
	}
</script>

修復(fù)漏洞

d[o_0]b同學(xué)發(fā)現(xiàn)了一個漏洞,就是當(dāng)鼠標(biāo)在屏幕右邊點(diǎn)擊時,菜單會被遮擋住,這邊做了一些調(diào)整。

修復(fù)前:

//原來的代碼
<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>

修復(fù)后:

//修改后的代碼,(由于要判斷,所以單獨(dú)寫了個方法,把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>

//對應(yīng)的rightClick方法
rightClick(e,item){
	// 屏幕可見寬
	let clientWidth = document.body.clientWidth;
	// 菜單寬
	let menuWidth = 150;
	// 點(diǎn)擊右鍵時會返回對應(yīng)的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;
},

總結(jié)

以上所述是小編給大家介紹的vue 自定義右鍵樣式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Vuex狀態(tài)機(jī)的快速了解與實(shí)例應(yīng)用

    Vuex狀態(tài)機(jī)的快速了解與實(shí)例應(yīng)用

    Vuex是專門為Vuejs應(yīng)用程序設(shè)計的狀態(tài)管理工具,這篇文章主要給大家介紹了關(guān)于Vuex狀態(tài)機(jī)快速了解與實(shí)例應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • vue實(shí)現(xiàn)表單單獨(dú)移除一個字段驗(yàn)證

    vue實(shí)現(xiàn)表單單獨(dú)移除一個字段驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)表單單獨(dú)移除一個字段驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue input標(biāo)簽通用指令校驗(yàn)的實(shí)現(xiàn)

    vue input標(biāo)簽通用指令校驗(yàn)的實(shí)現(xiàn)

    這篇文章主要介紹了vue input標(biāo)簽通用指令校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue鍵盤事件點(diǎn)擊事件加native操作

    vue鍵盤事件點(diǎn)擊事件加native操作

    這篇文章主要介紹了vue鍵盤事件點(diǎn)擊事件加native操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì)

    vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì)

    這篇文章主要介紹了vue可ctrl,shift多選,可添加標(biāo)記日歷組件詳細(xì),文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • vue中v-model的應(yīng)用及使用詳解

    vue中v-model的應(yīng)用及使用詳解

    v-model用于表單數(shù)據(jù)的雙向綁定,其實(shí)它就是一個語法糖。這篇文章主要介紹了vue中v-model的應(yīng)用,需要的朋友可以參考下
    2018-06-06
  • 最簡單的vue消息提示全局組件的方法

    最簡單的vue消息提示全局組件的方法

    這篇文章主要介紹了最簡單的vue消息提示全局組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Vue鼠標(biāo)點(diǎn)擊事件和鍵盤事件舉例詳解

    Vue鼠標(biāo)點(diǎn)擊事件和鍵盤事件舉例詳解

    在Vue框架中我們經(jīng)常需要綁定各種JS事件,如"點(diǎn)擊事件"、"鼠標(biāo)移動事件"、"鍵盤事件"等等,這篇文章主要給大家介紹了關(guān)于Vue鼠標(biāo)點(diǎn)擊事件和鍵盤事件的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Vue.js實(shí)現(xiàn)日歷功能

    Vue.js實(shí)現(xiàn)日歷功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)日歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解vue3沙箱機(jī)制

    詳解vue3沙箱機(jī)制

    這篇文章主要介紹了詳解vue3 沙箱機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論

苏尼特右旗| 额敏县| 平利县| 七台河市| 桂阳县| 信宜市| 南乐县| 望都县| 建始县| 桑日县| 汝南县| 西峡县| 长寿区| 喀喇| 集安市| 灵宝市| 鄱阳县| 久治县| 新营市| 静宁县| 鸡泽县| 西城区| 青浦区| 化德县| 曲水县| 安顺市| 文登市| 望奎县| 加查县| 当阳市| 民权县| 巩留县| 于都县| 海晏县| 阿鲁科尔沁旗| 福建省| 文安县| 方城县| 聂荣县| 鹰潭市| 温泉县|