使用vue-contextmenujs滑鼠右鍵菜單時,當高度不夠時顯示不全的問題

来源:https://www.cnblogs.com/jiekzou/archive/2022/07/12/16469384.html
-Advertisement-
Play Games

之前是採用npm或者yarn直接裝包vue-contextmenujs的形式: npm install vue-contextmenujs -S || yarn add vue-contextmenujs 當右鍵點擊記錄時,完整展示應該是如下圖所示: 結果,當點擊靠前的記錄時,頂部一部分記錄被瀏覽器 ...


  之前是採用npm或者yarn直接裝包vue-contextmenujs的形式:

npm install vue-contextmenujs -S || yarn add vue-contextmenujs

  當右鍵點擊記錄時,完整展示應該是如下圖所示:

 結果,當點擊靠前的記錄時,頂部一部分記錄被瀏覽器給遮擋了,如下圖所示:

   由於是使用的第三方開源組件,所以我直接將組件源碼下載下來,然後修改組件源碼,通過直接在源碼中引入組件的形式調用。組件github倉庫地址:https://github.com/GitHub-Laziji/menujs。

下載組件源碼後,直接將src目錄下的所有文件,拷貝到我們自己項目中的組件文件夾下,我這裡以src\components\global\vue-contextmenujs為例:

  然後修改Submenu.vue中的代碼,下麵紅色代碼部分是我修改之後的代碼:

 mounted() {
    this.visible = true;
    for (let item of this.items) {
      if (item.icon) {
        this.hasIcon = true;
        break;
      }
    }
    /**
     * 修複超出溢出的問題
     */
    this.$nextTick(() => {
      const windowWidth = document.documentElement.clientWidth;
      const windowHeight = document.documentElement.clientHeight;
      const menu = this.$refs.menu;
      const menuWidth = menu.offsetWidth;
      const menuHeight = menu.offsetHeight;

      (this.openTrend === SUBMENU_OPEN_TREND_LEFT
        ? this.leftOpen
        : this.rightOpen)(windowWidth, windowHeight, menuWidth);
      this.style.top = this.position.y;
      if (this.position.y + menuHeight > windowHeight) {
        if (this.position.height === 0) {
           let diffVal = this.position.y + menuHeight - windowHeight;
           this.style.top = this.position.y - diffVal;
           if(this.position.y<windowHeight/2){//點擊的是上半屏
             if(this.position.y>menuHeight){
               this.style.top = this.position.y;
             }
           }else{//點擊的是下半屏
              if(this.position.y>menuHeight){
               this.style.top = this.position.y-menuHeight;
             }
           }
        } else {
          this.style.top = windowHeight - menuHeight;
        }
      }
    });
  },

  引入組件:

import Contextmenu from '@/components/global/vue-contextmenujs';
Vue.use(Contextmenu);

  現在的運行效果如下:

  此解決方案缺點:雖然能夠解決現有問題,但是如果組件升級了,想要使用最新升級後的組件,還要再次修改代碼。

博客地址:http://www.cnblogs.com/jiekzou/
博客版權:本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接。
如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起討論,共同進步!
再次感謝您耐心的讀完本篇文章。
其它: .net-QQ群4:612347965 java-QQ群:805741535 H5-QQ群:773766020
我的拙作《ASP.NET MVC企業級實戰》《H5+移動應用實戰開發》 《Vue.js 2.x實踐指南》 《JavaScript實用教程 》 《Node+MongoDB+React 項目實戰開發》 已經出版,希望大家多多支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多媒體時代,音頻作為內容傳播中的重要形式,因其不受空間限制、認知負擔小、聲音元素多樣化等特點,廣泛應用於短視頻製作、兒童線上教育、有聲閱讀、游戲等領域產品,在各種形式的音頻呈現過程中,合理添加音效能夠帶給用戶更具氛圍感的沉浸式聲音體驗。HMS Core音頻編輯服務為助力全球開發者快速構建各類應用音頻 ...
  • vue特點 mvvm框架 響應式(聲明式) 組件化(支持自定義組件) 豐富的指令(Dom功能的抽象) 基於選項(template,data,computed,watch,methods) vue文檔集中ue Vue生態豐富且簡單 漸進式() Veu和Dom開發思想 Dom開發思想:當我們需要在交互事 ...
  • 1、普通的微信請求封裝 1 const http = (options) =>{ 2 return new Promise((resolve,reject) => { 3 wx.request({ 4 url: options.url, 5 method:options.method || 'get ...
  • 知識點 JavaScript部分函數 Array: concat():連接兩個數組。 join():設置分隔符連接數組成一個字元串。 pop():刪除最後一個元素。 sort():排序 Global: isNaN():判斷一個值是不是數字。 parseInt():轉換成整數。 parseFloat( ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 代碼輸出結果 function Person(name) { this.name = name } var p2 = new Person('king'); console.log(p2.__proto__) //Person.pr ...
  • 在實際項目中麵包屑是非常常見的一個功能,用於切換層級選項 當然有的公司會使用TagsView導航欄,這個後續在做介紹 今天分享一個簡易的麵包屑組件,這邊配合ui庫進行封裝 安裝依賴,在main.js中引入 yarn add element-ui import Vue from 'vue' impor ...
  • markdown - 更簡潔、更高效 強烈建議開發者認真閱讀本文檔,掌握md及HBuilderX對md的強大支持。 窄屏幕下,可按Alt+滾輪橫向滾動 很多人只把markdown用於網路文章發表,這糟蹋了markdown。 markdown不止是HTML的簡化版,更重要的是txt的升級版、word的 ...
  • sass變數同javascript變數,可以用來存儲一些信息,並且可以重覆使用。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...