首页 > 其他分享 >使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题

使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题

时间:2022-10-20 10:06:44浏览次数:49  
标签:menuHeight vue const style contextmenujs 右键 windowHeight 组件 position

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

npm install

  当右键点击记录时,完整展示应该是如下图所示:

使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题_h5

 结果,当点击靠前的记录时,顶部一部分记录被浏览器给遮挡了,如下图所示:

使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题_github_02

   由于是使用的第三方开源组件,所以我直接将组件源码下载下来,然后修改组件源码,通过直接在源码中引入组件的形式调用。组件github仓库地址:https://github.com/GitHub-Laziji/menujs。

下载组件源码后,直接将src目录下的所有文件,拷贝到我们自己项目中的组件文件夹下,我这里以src\components\global\vue-contextmenujs为例:

使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题_github_03

  然后修改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);

  现在的运行效果如下:

使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题_github_04

  此解决方案缺点:虽然能够解决现有问题,但是如果组件升级了,想要使用最新升级后的组件,还要再次修改代码。




标签:menuHeight,vue,const,style,contextmenujs,右键,windowHeight,组件,position
From: https://blog.51cto.com/u_14582694/5777686

相关文章

  • 使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题
    之前是采用npm或者yarn直接装包vue-contextmenujs的形式:npminstall当右键点击记录时,完整展示应该是如下图所示: 结果,当点击靠前的记录时,顶部一部分记录被浏览器给......
  • Vue 中 created 和 mounted 的区别
    大多数人在谈论生命周期钩子时会感到困惑的一件事是 ​​created​​​ 和 ​​mounted​​之间的区别。有着相似的名称,觉得应该做同样的事情,但还是有一些细微的差别。首......
  • Vue面试题37:如何处理Vue项目中的错误?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
    分析这是一个综合应用题目,在项目中我们常常需要将App的异常上报,此时错误处理就很重要了;这里要区分错误的类型,进而针对性做收集。然后将收集到的错误信息上报服务器;......
  • vue3+vite的项目创建
    1、创建项目可以直接创建vite项目,选择vue即可,我这里用的yarn创建的(yarn在下载插件时,据说比npm稳定和快)yarncreatevite2、命名项目名可以自己输入对应的项目名3、......
  • Vue前端的 Excel 导入和导出功能
    Excel解析为JSON基本内容组件效果和结构组件内容是很简单的结构和视图,直接查看如下的页面效果和代码即可:  <template><inputtype="file"ref="exc......
  • 关于使用谷歌 Chrome 浏览器右键菜单里的网页翻译失效问题
    【解决方法】刷新DNS生效win+r打开cmd,输入 ipconfig/flushdns 回车,刷新DNS,重启浏览器就ok了。 ......
  • Vue生命周期
    Vue生命周期生命周期就是我们从开始创建vue实例到销毁的一个过程,这一过程就叫做生命周期。方便我们在vue的各个阶段对其属性进行操作生命周期示例-----newVue实例化Vu......
  • vue源码解析
           入口   在runtime经过再次扩展  在core下的index再次被扩展   最后是core的instance里是真正的vue构造函数继续扩展vue实......
  • Vue 核心技术
    1.1Vue简介1.1.1官网英文官网中文官网1.1.2介绍与描述动态构建用户界面的渐进式JavaScript框架作者:尤雨溪1.1.3Vue的特点遵循MVVM模式编码简洁,体......
  • vue computed写法与传参
    //vue2computed:{fullName(){returnthis.firstName+this.lastName;}}//传参computed:{fullName(){return(params)=>{}......