vue添加自定義右鍵菜單的完整實(shí)例
一、寫原生方法
1.在所編輯的頁面,需要添加右鍵菜單的元素,綁定contextmenu事件,如下:
<li v-for="item in resourceList" :key="item.id" @click="handleClickFolder(item)" @contextmenu.prevent="openMenu($event,item)" > ... </li>
2.在頁面編寫右鍵菜單內(nèi)容:
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> <!-- <li v-if="rightClickItem.fileType==99" @click="handleClickFolder(rightClickItem)">打開</li> <li @click="handleDelete(rightClickItem)">刪除</li> <li @click="handleDownloadFile(rightClickItem)" v-if="rightClickItem.fileType!=99">下載</li> <li @click="handlePreviewFile(rightClickItem)" v-if="rightClickItem.fileType!=99">預(yù)覽</li> <li @click="handleUpdate(rightClickItem)">編輯</li> --> <li>內(nèi)容</li> </ul>
3.在data()中定義需要的變量屬性
data() { return { visible: false, top: 0, left: 0 } }
4.觀察visible的變化,來觸發(fā)關(guān)閉右鍵菜單,調(diào)用關(guān)閉菜單的方法
watch: { visible(value) { if (value) { document.body.addEventListener('click', this.closeMenu) } else { document.body.removeEventListener('click', this.closeMenu) } } }
5.在method中定義打開右鍵菜單和關(guān)閉右鍵菜單的兩個(gè)方法
openMenu(e, item) { this.rightClickItem = item; var x = e.pageX; var y = e.pageY; this.top = y; this.left = x; this.visible = true; }, closeMenu() { this.visible = false; }
6.在style中寫右鍵菜單的樣式
.contextmenu { margin: 0; background: #fff; z-index: 3000; position: absolute; list-style-type: none; padding: 5px 0; border-radius: 4px; font-size: 12px; font-weight: 400; color: #333; box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3); } .contextmenu li { margin: 0; padding: 7px 16px; cursor: pointer; } .contextmenu li:hover { background: #eee; }
二、使用插件vue-context-menu
安裝:
npm install vue-contextmenu --save
引用:
import VueContextMenu from 'vue-contextmenu' Vue.use(VueContextMenu)
使用:
<template> <div id="app" @contextmenu="showMenu" style="width: 100px;height: 100px;margin-top: 20px;background: red;"> <vue-context-menu :contextMenuData="contextMenuData" @savedata="savedata" @newdata="newdata"></vue-context-menu> </div> </template> <script> export default { name: 'app', data () { return { // contextmenu data (菜單數(shù)據(jù)) contextMenuData: { // the contextmenu name(@1.4.1 updated) menuName: 'demo', // The coordinates of the display(菜單顯示的位置) axis: { x: null, y: null }, // Menu options (菜單選項(xiàng)) menulists: [{ fnHandler: 'savedata', // Binding events(綁定事件) icoName: 'fa fa-home fa-fw', // icon (icon圖標(biāo) ) btnName: 'Save' // The name of the menu option (菜單名稱) }, { fnHandler: 'newdata', icoName: 'fa fa-home fa-fw', btnName: 'New' }] } } }, methods: { showMenu () { event.preventDefault() var x = event.clientX var y = event.clientY // Get the current location this.contextMenuData.axis = { x, y } }, savedata () { alert(1) }, newdata () { console.log('newdata!') } } } </script>
tip:有說不兼容ie的,具體沒有測試
到此這篇關(guān)于vue添加自定義右鍵菜單的文章就介紹到這了,更多相關(guān)vue添加自定義右鍵菜單內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue項(xiàng)目部署后提示刷新版本的實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目部署后提示刷新版本的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-06-06vue2.x element-ui實(shí)現(xiàn)pc端購物車頁面demo
這篇文章主要為大家介紹了vue2.x element-ui實(shí)現(xiàn)pc端購物車頁面demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06vue-form表單驗(yàn)證是否為空值的實(shí)例詳解
今天小編就為大家分享一篇vue-form表單驗(yàn)證是否為空值的實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10vue cli如何配置開發(fā)環(huán)境下的sourcemap
這篇文章主要介紹了vue cli如何配置開發(fā)環(huán)境下的sourcemap問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令
本文主要介紹了vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05