vue3實現(xiàn)鼠標右鍵顯示菜單,點擊其他地方消失問題
vue3觸發(fā)鼠標右鍵的回調(diào)函數(shù)
在標簽上加上 @contextmenu=“contextmenu” 即可
<div @contextmenu="contextmenu" class="contextmenu"></div>
顯示我們定義的菜單
去掉瀏覽器默認的菜單
- 通過 preventDefault api
e.preventDefault(); //默認觸發(fā)事件的行為被 preventDefault() 取消了
- 定義一個菜單頁面
<div class="fixed-box" :style="fixedBoxStyleObject" v-show="isShowMenu" >
<span>刪除聊天</span>
</div>這個頁面綁定isShowMenu變量用來顯示或不顯示菜單,通過fixedBoxStyleObject變量來設(shè)置菜單的位置
- 定義觸發(fā)的回調(diào)函數(shù)
const contextmenu = (e) => {
e.preventDefault(); //默認觸發(fā)事件的行為被 preventDefault() 取消了
fixedBoxStyleObject.left = e.clientX + 'px'
fixedBoxStyleObject.top = e.clientY + 'px'
isShowMenu.value = true
}
點擊其他地方菜單消失
一般我們用設(shè)置焦點和失去焦點觸發(fā)事件來完成這個功能,例如:
在右鍵時設(shè)置焦點,那么當點擊其他地方時就會觸發(fā)失去焦點事件,在調(diào)用回調(diào)函數(shù)即可
- 優(yōu)化template部分
<div tabindex="-1" class="fixed-box" :style="fixedBoxStyleObject" v-show="isShowMenu" @blur="isShowMenu = false" ref="fixedBoxRef">
<span>刪除聊天</span>
</div>
- 優(yōu)化scipt部分
const contextmenu = (e) => {
e.preventDefault(); //默認觸發(fā)事件的行為被 preventDefault() 取消了
fixedBoxStyleObject.left = e.clientX + 'px'
fixedBoxStyleObject.top = e.clientY + 'px'
isShowMenu.value = true
setTimeout(() => {
fixedBoxRef.value.focus()
},1)
}
tips:
- 由于div本身不能獲取焦點,但設(shè)置tabindex后便可以獲取焦點
- 設(shè)定一個定時器的原因是dom從不顯示到顯示需要時間,必須得顯示后才能獲取焦點
css部分
.fixed-box{
position: fixed;
color: black;
padding: 8px;
width: fit-content;
background-color: #F8F8F8;
}
.contextmenu{
width:300px;
height:300px;
margin: 100px auto;
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js實現(xiàn)在下拉列表區(qū)域外點擊即可關(guān)閉下拉列表的功能(自定義下拉列表)
這篇文章主要介紹了Vue.js實現(xiàn)在下拉列表區(qū)域外點擊即可關(guān)閉下拉列表的功能(自定義下拉列表) ,需要的朋友可以參考下2017-05-05
vue 微信分享回調(diào)iOS和安卓回調(diào)出現(xiàn)錯誤的解決
這篇文章主要介紹了vue 微信分享回調(diào)iOS和安卓回調(diào)出現(xiàn)錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
在vue中使用防抖和節(jié)流,防止重復(fù)點擊或重復(fù)上拉加載實例
今天小編就為大家分享一篇在vue中使用防抖和節(jié)流,防止重復(fù)點擊或重復(fù)上拉加載實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Vue中引用JSON數(shù)據(jù)的方法小結(jié)
在現(xiàn)代Web開發(fā)中,JSON是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機器解析和生成,Vue.js作為一個流行的前端框架,支持多種方式引入和處理JSON數(shù)據(jù),本文將詳細介紹幾種在Vue中引用JSON數(shù)據(jù)的方法,需要的朋友可以參考下2024-10-10
Vue登錄攔截 登錄后繼續(xù)跳轉(zhuǎn)指定頁面的操作
這篇文章主要介紹了Vue登錄攔截 登錄后繼續(xù)跳轉(zhuǎn)指定頁面的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

