91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用vue實現自定義全局右鍵菜單

發布時間:2022-10-21 15:58:54 來源:億速云 閱讀:274 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“如何用vue實現自定義全局右鍵菜單”,內容詳細,步驟清晰,細節處理妥當,希望這篇“如何用vue實現自定義全局右鍵菜單”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

注意:

需要在項目中找到頁面整體布局的組件,比如項目使用Home.vue作為整個項目的公共布局,將根元素定位設置成relative,使右鍵菜單相對于其進行定位。

一、vuex中定義全局狀態用于管理右鍵菜單

export default {
    /**
     * menuContent格式:
     * [
     *      {
     *          name: '新建文件',   // 操作名
     *          method: 'createDirectory',  // 需要執行的對應組件中的方法
     *             disabled: true        // 是否禁用,可以根據頁面具體邏輯進行調整
     *      }
     * ]
     * 
     * 
     * 整體右鍵菜單采用絕對定位,所以clientX、clientY代表是left和top定位
     */
    state: {
        menuContent: [],    // 右鍵菜單內容
        clientX: '',    // left
        clientY: '',    // top
        displayContextMenu: false   // 是否展示右鍵菜單
    },
    mutations: {
        SET_CONTEXT_MENU: (state, payload) => {
            state.menuContent = payload.menuContent;
            state.clientX = payload.clientX;
            state.clientY = payload.clientY;
            state.displayContextMenu = payload.displayContextMenu;
        },
    }
}

二、定義公共組件ContextMenu.vue

<template>
    <div class="context-menu" v-show="contextMenu.displayContextMenu" 
        :>
        <ul>
            <li v-for="(item, i) in contextMenu.menuContent" :key="i" :class="item.disabled ? 'disabled' : ''" 
                @click="emitEvent(item.method)">
                {{item.name}}
            </li>
        </ul>
    </div>
</template>

<script>
import { mapState } from 'vuex';
import bus from '@/views/common/bus';
export default {
    name: 'ContextMenu',
    data(){
        return {
        }
    },
    computed: {
        ...mapState(['contextMenu'])
    },
    methods: {
        emitEvent(type){
            bus.$emit('operateDirectory', type)
        }
    }
}
</script>

<style lang="scss" scoped>
    .context-menu {
        position: absolute;
        background: #FFF;
        color: #34495E;
        min-width: 100px;
        box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.2);
        border-radius: 2px;
        cursor: pointer;
        z-index: 1002;
        &>ul {
            text-align: left;
            padding: 5px 10px;
            &>li {
                padding: 3px 4px;
                font-size: 12px;
                list-style: none;
                height: 24px;
                line-height: 24px;
                &:hover {
                    background: #EDF6FF;
                }
            }
            .disabled {
                color: #888585;
                pointer-events: none;
            }
        }
    }
</style>

三、在組件中使用

import { mapState } from 'vuex';
// ...

computed: {
    ...mapState(['contextMenu'])
},
created(){
    bus.$on('operateDirectory', (param) => {
    // 點擊右鍵菜單時,應觸發組件內的同名方法,首先應判斷該方法是否在本組件內存在,存在則調用
        if(this[param]){
            this[param]();
        }
    });
},
// ...

methods: {
    showContextMenu(event, data) {
        event.preventDefault();        // 阻止瀏覽器的默認事件
        const menuContent = {
            menuContent: [
            {
                icon: "el-icon-upload2",
                name: "運行",
                method: "run",
            },
            {
                icon: "el-icon-refresh",
                name: "編輯",
                method: "editConfig",
            },
            {
                icon: "el-icon-refresh",
                name: "添加",
                method: "addCommond",
            },
            {
                icon: "el-icon-refresh",
                name: "刪除",
                method: "deleteConfig",
            },
            ],
            clientX: event.clientX,
            clientY: event.clientY,
            displayContextMenu: true,
        };
        this.$store.commit("SET_CONTEXT_MENU", menuContent);
        // 再次點擊頁面,右鍵菜單消失
        document.onclick = (event) => {
            this.$store.commit("SET_CONTEXT_MENU", {
                displayContextMenu: false,
            });
        };
    },
    run(){
        // ...
    },
    editConfig(){
        // ...
    },
    addCommond(){
        // ...
    },
    deleteConfig(){
        // ...
    }
}

讀到這里,這篇“如何用vue實現自定義全局右鍵菜單”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

通山县| 灵丘县| 东山县| 宾川县| 如东县| 海门市| 晴隆县| 泸水县| 长岛县| 天津市| 霍城县| 石门县| 汉阴县| 绍兴县| 枣阳市| 定边县| 门头沟区| 荔浦县| 宝坻区| 宜丰县| 韶关市| 昌宁县| 勐海县| 云安县| 百色市| 永顺县| 梁平县| 谷城县| 丰城市| 凌源市| 嘉善县| 尖扎县| 美姑县| 永嘉县| 旅游| 安康市| 宁德市| 开原市| 芦山县| 龙泉市| 定日县|